/ Hex Artifact Content
Login

Artifact fee8286ff026bb9cf96ce87971b60aba53863b78:


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 69 66 28 20 69 73 42 74 72 65 65 43 75 72    if( isBtreeCur
1fa0: 73 6f 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78  sor ){.      pCx
1fb0: 2d 3e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43  ->pCursor = (BtC
1fc0: 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20  ursor*).        
1fd0: 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44    &pMem->z[ROUND
1fe0: 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  8(sizeof(VdbeCur
1ff0: 73 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75  sor))+2*sizeof(u
2000: 33 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20  32)*nField];.   
2010: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
2020: 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70  ursorZero(pCx->p
2030: 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
2040: 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b   }.  return pCx;
2050: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  .}../*.** Try to
2060: 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65   convert a value
2070: 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20   into a numeric 
2080: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2090: 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73  f we can.** do s
20a0: 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  o without loss o
20b0: 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20  f information.  
20c0: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
20d0: 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a  if the string.**
20e0: 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75   looks like a nu
20f0: 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74  mber, convert it
2100: 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20   into a number. 
2110: 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a   If it does not.
2120: 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e  ** look like a n
2130: 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20  umber, leave it 
2140: 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  alone..**.** If 
2150: 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20 66  the bTryForInt f
2160: 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68 65  lag is true, the
2170: 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74 20 69  n extra effort i
2180: 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a 2a  s made to give.*
2190: 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70  * an integer rep
21a0: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53 74  resentation.  St
21b0: 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b 20  rings that look 
21c0: 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70 6f  like floating po
21d0: 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62 75  int.** values bu
21e0: 74 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f 20  t which have no 
21f0: 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70 6f  fractional compo
2200: 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20 27  nent (example: '
2210: 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c 20  48.00').** will 
2220: 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20 72  have a MEM_Int r
2230: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77 68  epresentation wh
2240: 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73  en bTryForInt is
2250: 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   true..**.** If 
2260: 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66 61  bTryForInt is fa
2270: 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68 65  lse, then if the
2280: 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63 6f   input string co
2290: 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61 6c  ntains a decimal
22a0: 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78 70  .** point or exp
22b0: 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69 6f  onential notatio
22c0: 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  n, the result is
22d0: 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c 20   only MEM_Real, 
22e0: 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72 65  even.** if there
22f0: 20 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e 74   is an exact int
2300: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2310: 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e 74  ion of the quant
2320: 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ity..*/.static v
2330: 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  oid applyNumeric
2340: 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52  Affinity(Mem *pR
2350: 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72 49  ec, int bTryForI
2360: 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72 56  nt){.  double rV
2370: 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61 6c  alue;.  i64 iVal
2380: 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20 70  ue;.  u8 enc = p
2390: 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73 65  Rec->enc;.  asse
23a0: 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73  rt( (pRec->flags
23b0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
23c0: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d  Int|MEM_Real))==
23d0: 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66 28  MEM_Str );.  if(
23e0: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52 65   sqlite3AtoF(pRe
23f0: 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20 70  c->z, &rValue, p
2400: 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20  Rec->n, enc)==0 
2410: 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20  ) return;.  if( 
2420: 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36 34  0==sqlite3Atoi64
2430: 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c 75  (pRec->z, &iValu
2440: 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29  e, pRec->n, enc)
2450: 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e   ){.    pRec->u.
2460: 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20  i = iValue;.    
2470: 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pRec->flags |= M
2480: 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65 7b  EM_Int;.  }else{
2490: 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20 3d  .    pRec->u.r =
24a0: 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65   rValue;.    pRe
24b0: 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  c->flags |= MEM_
24c0: 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62 54  Real;.    if( bT
24d0: 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69 74  ryForInt ) sqlit
24e0: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
24f0: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 7d  inity(pRec);.  }
2500: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73  .}../*.** Proces
2510: 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e  sing is determin
2520: 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74  e by the affinit
2530: 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a  y parameter:.**.
2540: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ** SQLITE_AFF_IN
2550: 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45  TEGER:.** SQLITE
2560: 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51  _AFF_REAL:.** SQ
2570: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
2580: 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63  :.**    Try to c
2590: 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61  onvert pRec to a
25a0: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
25b0: 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a  entation or a .*
25c0: 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  *    floating-po
25d0: 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  int representati
25e0: 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72  on if an integer
25f0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a   representation.
2600: 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73  **    is not pos
2610: 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61  sible.  Note tha
2620: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65  t the integer re
2630: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a  presentation is.
2640: 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65  **    always pre
2650: 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20  ferred, even if 
2660: 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20  the affinity is 
2670: 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a  REAL, because.**
2680: 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72      an integer r
2690: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
26a0: 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69   more space effi
26b0: 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a  cient on disk..*
26c0: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
26d0: 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76  TEXT:.**    Conv
26e0: 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65  ert pRec to a te
26f0: 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  xt representatio
2700: 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  n..**.** SQLITE_
2710: 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20  AFF_NONE:.**    
2720: 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20  No-op.  pRec is 
2730: 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74  unchanged..*/.st
2740: 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41  atic void applyA
2750: 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a  ffinity(.  Mem *
2760: 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f  pRec,          /
2770: 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61  * The value to a
2780: 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f  pply affinity to
2790: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
27a0: 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65  ity,      /* The
27b0: 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20   affinity to be 
27c0: 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20  applied */.  u8 
27d0: 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20  enc             
27e0: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78   /* Use this tex
27f0: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b  t encoding */.){
2800: 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e  .  if( affinity>
2810: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
2820: 52 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65 72  RIC ){.    asser
2830: 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  t( affinity==SQL
2840: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
2850: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
2860: 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20  ITE_AFF_REAL.   
2870: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66            || aff
2880: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
2890: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20  F_NUMERIC );.   
28a0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
28b0: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
28c0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 52  ){.      if( (pR
28d0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
28e0: 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
28f0: 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
2900: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 20  ags & MEM_Str ) 
2910: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2920: 6e 69 74 79 28 70 52 65 63 2c 31 29 3b 0a 20 20  nity(pRec,1);.  
2930: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2940: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
2950: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2960: 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ec);.      }.   
2970: 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61   }.  }else if( a
2980: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2990: 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  AFF_TEXT ){.    
29a0: 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20  /* Only attempt 
29b0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74  the conversion t
29c0: 6f 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20  o TEXT if there 
29d0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  is an integer or
29e0: 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70   real.    ** rep
29f0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f  resentation (blo
2a00: 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f  b and NULL do no
2a10: 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29  t get converted)
2a20: 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20   but no string. 
2a30: 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61     ** representa
2a40: 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  tion..    */.   
2a50: 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66   if( 0==(pRec->f
2a60: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 26 26  lags&MEM_Str) &&
2a70: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d   (pRec->flags&(M
2a80: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29  EM_Real|MEM_Int)
2a90: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
2aa0: 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
2ab0: 66 79 28 70 52 65 63 2c 20 65 6e 63 2c 20 31 29  fy(pRec, enc, 1)
2ac0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
2ad0: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2ae0: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2af0: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2b00: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2b10: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2b20: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2b30: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2b40: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2b50: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2b60: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2b70: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2b80: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2b90: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2ba0: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2bb0: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2bc0: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2bd0: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2be0: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69  e argument..*/.i
2bf0: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
2c00: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
2c10: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2c20: 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20  l){.  int eType 
2c30: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
2c40: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66  type(pVal);.  if
2c50: 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  ( eType==SQLITE_
2c60: 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20  TEXT ){.    Mem 
2c70: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
2c80: 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d  al;.    applyNum
2c90: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2ca0: 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70 65  m, 0);.    eType
2cb0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
2cc0: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d  _type(pVal);.  }
2cd0: 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b  .  return eType;
2ce0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
2cf0: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
2d00: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
2d10: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
2d20: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
2d30: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
2d40: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
2d50: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2d60: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2d70: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
2d80: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
2d90: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
2da0: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
2db0: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
2dc0: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
2dd0: 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d  nc);.}../*.** pM
2de0: 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c  em currently onl
2df0: 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67  y holds a string
2e00: 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65 20   type (or maybe 
2e10: 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20 63  a BLOB that we c
2e20: 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74 20  an.** interpret 
2e30: 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20 77  as a string if w
2e40: 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f 6d  e want to).  Com
2e50: 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73 70  pute its corresp
2e60: 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69  onding.** numeri
2e70: 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20 6f  c type, if has o
2e80: 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d 65  ne.  Set the pMe
2e90: 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d  m->u.r and pMem-
2ea0: 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20 61  >u.i fields.** a
2eb0: 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73  ccordingly..*/.s
2ec0: 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54 45  tatic u16 SQLITE
2ed0: 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75 74  _NOINLINE comput
2ee0: 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d  eNumericType(Mem
2ef0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72   *pMem){.  asser
2f00: 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
2f10: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
2f20: 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73  eal))==0 );.  as
2f30: 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
2f40: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2f50: 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a 20  M_Blob))!=0 );. 
2f60: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
2f70: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
2f80: 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.r, pMem->n, p
2f90: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
2fa0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
2fb0: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  }.  if( sqlite3A
2fc0: 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26  toi64(pMem->z, &
2fd0: 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d  pMem->u.i, pMem-
2fe0: 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d  >n, pMem->enc)==
2ff0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
3000: 20 72 65 74 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b   return MEM_Int;
3010: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 4d 45  .  }.  return ME
3020: 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  M_Real;.}../*.**
3030: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 65   Return the nume
3040: 72 69 63 20 74 79 70 65 20 66 6f 72 20 70 4d 65  ric type for pMe
3050: 6d 2c 20 65 69 74 68 65 72 20 4d 45 4d 5f 49 6e  m, either MEM_In
3060: 74 20 6f 72 20 4d 45 4d 5f 52 65 61 6c 20 6f 72  t or MEM_Real or
3070: 20 62 6f 74 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65   both or.** none
3080: 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65  .  .**.** Unlike
3090: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
30a0: 69 6e 69 74 79 28 29 2c 20 74 68 69 73 20 72 6f  inity(), this ro
30b0: 75 74 69 6e 65 20 64 6f 65 73 20 6e 6f 74 20 6d  utine does not m
30c0: 6f 64 69 66 79 20 70 4d 65 6d 2d 3e 66 6c 61 67  odify pMem->flag
30d0: 73 2e 0a 2a 2a 20 42 75 74 20 69 74 20 64 6f 65  s..** But it doe
30e0: 73 20 73 65 74 20 70 4d 65 6d 2d 3e 75 2e 72 20  s set pMem->u.r 
30f0: 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 61 70  and pMem->u.i ap
3100: 70 72 6f 70 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a  propriately..*/.
3110: 73 74 61 74 69 63 20 75 31 36 20 6e 75 6d 65 72  static u16 numer
3120: 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d  icType(Mem *pMem
3130: 29 7b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66  ){.  if( pMem->f
3140: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
3150: 4d 45 4d 5f 52 65 61 6c 29 20 29 7b 0a 20 20 20  MEM_Real) ){.   
3160: 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c   return pMem->fl
3170: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
3180: 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 7d 0a 20 20  EM_Real);.  }.  
3190: 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  if( pMem->flags 
31a0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
31b0: 6c 6f 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  lob) ){.    retu
31c0: 72 6e 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69  rn computeNumeri
31d0: 63 54 79 70 65 28 70 4d 65 6d 29 3b 0a 20 20 7d  cType(pMem);.  }
31e0: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
31f0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3200: 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20  BUG./*.** Write 
3210: 61 20 6e 69 63 65 20 73 74 72 69 6e 67 20 72 65  a nice string re
3220: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
3230: 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
3240: 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74  cell pMem.** int
3250: 6f 20 62 75 66 66 65 72 20 7a 42 75 66 2c 20 6c  o buffer zBuf, l
3260: 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76  ength nBuf..*/.v
3270: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d  oid sqlite3VdbeM
3280: 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 4d 65  emPrettyPrint(Me
3290: 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a  m *pMem, char *z
32a0: 42 75 66 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43  Buf){.  char *zC
32b0: 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74  sr = zBuf;.  int
32c0: 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   f = pMem->flags
32d0: 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ;..  static cons
32e0: 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e  t char *const en
32f0: 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29  cnames[] = {"(X)
3300: 22 2c 20 22 28 38 29 22 2c 20 22 28 31 36 4c 45  ", "(8)", "(16LE
3310: 29 22 2c 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a  )", "(16BE)"};..
3320: 20 20 69 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62    if( f&MEM_Blob
3330: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
3340: 20 20 20 63 68 61 72 20 63 3b 0a 20 20 20 20 69     char c;.    i
3350: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
3360: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 7a 27 3b  {.      c = 'z';
3370: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3380: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
3390: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
33a0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
33b0: 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29  f & MEM_Static )
33c0: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 74 27 3b  {.      c = 't';
33d0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
33e0: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
33f0: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3400: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3410: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
3420: 20 20 20 20 63 20 3d 20 27 65 27 3b 0a 20 20 20      c = 'e';.   
3430: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3440: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3450: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
3460: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 20 3d  }else{.      c =
3470: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   's';.    }..   
3480: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3490: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 63  f(100, zCsr, "%c
34a0: 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43 73 72 20  ", c);.    zCsr 
34b0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
34c0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 73 71  30(zCsr);.    sq
34d0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
34e0: 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c  00, zCsr, "%d[",
34f0: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a   pMem->n);.    z
3500: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3510: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3520: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20    for(i=0; i<16 
3530: 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b  && i<pMem->n; i+
3540: 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  +){.      sqlite
3550: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3560: 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28  zCsr, "%02X", ((
3570: 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26  int)pMem->z[i] &
3580: 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a   0xFF));.      z
3590: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
35a0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
35b0: 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b    }.    for(i=0;
35c0: 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d   i<16 && i<pMem-
35d0: 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; i++){.      
35e0: 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a  char z = pMem->z
35f0: 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  [i];.      if( z
3600: 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a  <32 || z>126 ) *
3610: 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20  zCsr++ = '.';.  
3620: 20 20 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b      else *zCsr++
3630: 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   = z;.    }..   
3640: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3650: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25  f(100, zCsr, "]%
3660: 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  s", encnames[pMe
3670: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43  m->enc]);.    zC
3680: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
3690: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
36a0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72   if( f & MEM_Zer
36b0: 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  o ){.      sqlit
36c0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
36d0: 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65   zCsr,"+%dz",pMe
36e0: 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20  m->u.nZero);.   
36f0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3700: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3710: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73  ;.    }.    *zCs
3720: 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73  r = '\0';.  }els
3730: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3740: 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20  r ){.    int j, 
3750: 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d  k;.    zBuf[0] =
3760: 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66 20   ' ';.    if( f 
3770: 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20  & MEM_Dyn ){.   
3780: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27     zBuf[1] = 'z'
3790: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
37a0: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
37b0: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
37c0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
37d0: 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20   f & MEM_Static 
37e0: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
37f0: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
3800: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3810: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
3820: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3830: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
3840: 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  m ){.      zBuf[
3850: 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20  1] = 'e';.      
3860: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3870: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
3880: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3890: 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31  se{.      zBuf[1
38a0: 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20  ] = 's';.    }. 
38b0: 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71     k = 2;.    sq
38c0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
38d0: 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25  00, &zBuf[k], "%
38e0: 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  d", pMem->n);.  
38f0: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
3900: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
3910: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
3920: 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a  = '[';.    for(j
3930: 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d  =0; j<15 && j<pM
3940: 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20  em->n; j++){.   
3950: 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e     u8 c = pMem->
3960: 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[j];.      if( 
3970: 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78 37  c>=0x20 && c<0x7
3980: 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  f ){.        zBu
3990: 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20  f[k++] = c;.    
39a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
39b0: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27   zBuf[k++] = '.'
39c0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
39d0: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
39e0: 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ']';.    sqlite3
39f0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26 7a  _snprintf(100,&z
3a00: 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73  Buf[k], encnames
3a10: 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20  [pMem->enc]);.  
3a20: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
3a30: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
3a40: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
3a50: 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69  = 0;.  }.}.#endi
3a60: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
3a70: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69  _DEBUG./*.** Pri
3a80: 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nt the value of 
3a90: 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20 74  a register for t
3aa0: 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73 3a  racing purposes:
3ab0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3ac0: 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 4d 65  memTracePrint(Me
3ad0: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e  m *p){.  if( p->
3ae0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65  flags & MEM_Unde
3af0: 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70 72 69  fined ){.    pri
3b00: 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65 64 22  ntf(" undefined"
3b10: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  );.  }else if( p
3b20: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
3b30: 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ll ){.    printf
3b40: 28 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c  (" NULL");.  }el
3b50: 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  se if( (p->flags
3b60: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3b70: 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c  Str))==(MEM_Int|
3b80: 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20  MEM_Str) ){.    
3b90: 70 72 69 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64  printf(" si:%lld
3ba0: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65  ", p->u.i);.  }e
3bb0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3bc0: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
3bd0: 20 20 70 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c    printf(" i:%ll
3be0: 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66  d", p->u.i);.#if
3bf0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3c00: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
3c10: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3c20: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
3c30: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3c40: 72 3a 25 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a  r:%g", p->u.r);.
3c50: 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20 69  #endif.  }else i
3c60: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3c70: 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20 20 20  M_RowSet ){.    
3c80: 70 72 69 6e 74 66 28 22 20 28 72 6f 77 73 65 74  printf(" (rowset
3c90: 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  )");.  }else{.  
3ca0: 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d    char zBuf[200]
3cb0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
3cc0: 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28  eMemPrettyPrint(
3cd0: 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 70 72  p, zBuf);.    pr
3ce0: 69 6e 74 66 28 22 20 25 73 22 2c 20 7a 42 75 66  intf(" %s", zBuf
3cf0: 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20  );.  }.}.static 
3d00: 76 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61  void registerTra
3d10: 63 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d  ce(int iReg, Mem
3d20: 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22   *p){.  printf("
3d30: 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65  REG[%d] = ", iRe
3d40: 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72  g);.  memTracePr
3d50: 69 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66  int(p);.  printf
3d60: 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66  ("\n");.}.#endif
3d70: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
3d80: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
3d90: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
3da0: 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73  ,M) if(db->flags
3db0: 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63  &SQLITE_VdbeTrac
3dc0: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
3dd0: 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  R,M).#else.#  de
3de0: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
3df0: 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a  ACE(R,M).#endif.
3e00: 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
3e10: 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77  OFILE../* .** hw
3e20: 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20  time.h contains 
3e30: 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72  inline assembler
3e40: 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d   code for implem
3e50: 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d  enting .** high-
3e60: 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69  performance timi
3e70: 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a  ng routines..*/.
3e80: 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65  #include "hwtime
3e90: 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .h"..#endif..#if
3ea0: 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a  ndef NDEBUG./*.*
3eb0: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
3ec0: 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66  is only called f
3ed0: 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73  rom within an as
3ee0: 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f  sert() expressio
3ef0: 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20  n. It.** checks 
3f00: 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33  that the sqlite3
3f10: 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61  .nTransaction va
3f20: 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63  riable is correc
3f30: 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68  tly set to.** th
3f40: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  e number of non-
3f50: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
3f60: 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79  points currently
3f70: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b   in the .** link
3f80: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
3f90: 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76   at sqlite3.pSav
3fa0: 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55  epoint..** .** U
3fb0: 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  sage:.**.**     
3fc0: 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
3fd0: 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
3fe0: 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  );.*/.static int
3ff0: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
4000: 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62  ount(sqlite3 *db
4010: 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a  ){.  int n = 0;.
4020: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a    Savepoint *p;.
4030: 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76    for(p=db->pSav
4040: 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e  epoint; p; p=p->
4050: 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73  pNext) n++;.  as
4060: 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53  sert( n==(db->nS
4070: 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69  avepoint + db->i
4080: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
4090: 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75  point) );.  retu
40a0: 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  rn 1;.}.#endif..
40b0: 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61  ./*.** Execute a
40c0: 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45  s much of a VDBE
40d0: 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63   program as we c
40e0: 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74  an..** This is t
40f0: 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74  he core of sqlit
4100: 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a  e3_step().  .*/.
4110: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45  int sqlite3VdbeE
4120: 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20  xec(.  Vdbe *p  
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4140: 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f    /* The VDBE */
4150: 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3d 30 3b 20  .){.  int pc=0; 
4160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4170: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 61 6d 20   /* The program 
4180: 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20  counter */.  Op 
4190: 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20  *aOp = p->aOp;  
41a0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
41b0: 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f  of p->aOp */.  O
41c0: 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20 20  p *pOp;         
41d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
41e0: 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a  rent operation *
41f0: 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  /.  int rc = SQL
4200: 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f  ITE_OK;        /
4210: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
4220: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  n */.  sqlite3 *
4230: 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20  db = p->db;     
4240: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
4250: 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53  e */.  u8 resetS
4260: 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30  chemaOnFault = 0
4270: 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d  ; /* Reset schem
4280: 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  a after an error
4290: 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a   if positive */.
42a0: 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20    u8 encoding = 
42b0: 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20  ENC(db);     /* 
42c0: 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  The database enc
42d0: 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  oding */.  int i
42e0: 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20  Compare = 0;    
42f0: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
4300: 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61  of last OP_Compa
4310: 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  re operation */.
4320: 20 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74    unsigned nVmSt
4330: 65 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20  ep = 0;      /* 
4340: 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
4350: 6c 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20  l machine steps 
4360: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4370: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
4380: 43 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67  CALLBACK.  unsig
4390: 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ned nProgressLim
43a0: 69 74 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b 65  it = 0;/* Invoke
43b0: 20 78 50 72 6f 67 72 65 73 73 28 29 20 77 68 65   xProgress() whe
43c0: 6e 20 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65  n nVmStep reache
43d0: 73 20 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66  s this */.#endif
43e0: 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70  .  Mem *aMem = p
43f0: 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a  ->aMem;       /*
4400: 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d   Copy of p->aMem
4410: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20   */.  Mem *pIn1 
4420: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
4430: 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70   /* 1st input op
4440: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
4450: 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn2 = 0;       
4460: 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70        /* 2nd inp
4470: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
4480: 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20  Mem *pIn3 = 0;  
4490: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72             /* 3r
44a0: 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  d input operand 
44b0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d  */.  Mem *pOut =
44c0: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
44d0: 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e  /* Output operan
44e0: 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72  d */.  int *aPer
44f0: 6d 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20  mute = 0;       
4500: 20 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e    /* Permutation
4510: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20   of columns for 
4520: 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20  OP_Compare */.  
4530: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  i64 lastRowid = 
4540: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20  db->lastRowid;  
4550: 2f 2a 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f  /* Saved value o
4560: 66 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72  f the last inser
4570: 74 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65  t ROWID */.#ifde
4580: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
4590: 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20   u64 start;     
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
45b0: 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61  PU clock count a
45c0: 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64  t start of opcod
45d0: 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a  e */.#endif.  /*
45e0: 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20  ** INSERT STACK 
45f0: 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a  UNION HERE ***/.
4600: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61  .  assert( p->ma
4610: 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f  gic==VDBE_MAGIC_
4620: 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74  RUN );  /* sqlit
4630: 65 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69  e3_step() verifi
4640: 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c  es this */.  sql
4650: 69 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29  ite3VdbeEnter(p)
4660: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53  ;.  if( p->rc==S
4670: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
4680: 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
4690: 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ns if a malloc()
46a0: 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74   inside a call t
46b0: 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  o sqlite3_column
46c0: 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a  _text() or.    *
46d0: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
46e0: 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64  _text16() failed
46f0: 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e  .  */.    goto n
4700: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73  o_mem;.  }.  ass
4710: 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  ert( p->rc==SQLI
4720: 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d  TE_OK || p->rc==
4730: 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20  SQLITE_BUSY );. 
4740: 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
4750: 65 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64  eader || p->read
4760: 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e  Only!=0 );.  p->
4770: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
4780: 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d    p->iCurrentTim
4790: 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  e = 0;.  assert(
47a0: 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29   p->explain==0 )
47b0: 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  ;.  p->pResultSe
47c0: 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73  t = 0;.  db->bus
47d0: 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d  yHandler.nBusy =
47e0: 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75 31   0;.  if( db->u1
47f0: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
4800: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
4810: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20  to_interrupt;.  
4820: 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
4830: 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65  ceSql(p);.#ifnde
4840: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
4850: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
4860: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
4870: 65 73 73 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ess ){.    asser
4880: 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67  t( 0 < db->nProg
4890: 72 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e  ressOps );.    n
48a0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
48b0: 28 75 6e 73 69 67 6e 65 64 29 70 2d 3e 61 43 6f  (unsigned)p->aCo
48c0: 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
48d0: 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d  TSTATUS_VM_STEP]
48e0: 3b 0a 20 20 20 20 69 66 28 20 6e 50 72 6f 67 72  ;.    if( nProgr
48f0: 65 73 73 4c 69 6d 69 74 3d 3d 30 20 29 7b 0a 20  essLimit==0 ){. 
4900: 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69       nProgressLi
4910: 6d 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72  mit = db->nProgr
4920: 65 73 73 4f 70 73 3b 0a 20 20 20 20 7d 65 6c 73  essOps;.    }els
4930: 65 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65  e{.      nProgre
4940: 73 73 4c 69 6d 69 74 20 25 3d 20 28 75 6e 73 69  ssLimit %= (unsi
4950: 67 6e 65 64 29 64 62 2d 3e 6e 50 72 6f 67 72 65  gned)db->nProgre
4960: 73 73 4f 70 73 3b 0a 20 20 20 20 7d 0a 20 20 7d  ssOps;.    }.  }
4970: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
4980: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71  QLITE_DEBUG.  sq
4990: 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
49a0: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20  Malloc();.  if( 
49b0: 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20 28  p->pc==0.   && (
49c0: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 28  p->db->flags & (
49d0: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
49e0: 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ng|SQLITE_VdbeEQ
49f0: 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  P|SQLITE_VdbeTra
4a00: 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  ce))!=0.  ){.   
4a10: 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20   int i;.    int 
4a20: 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73 71  once = 1;.    sq
4a30: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71  lite3VdbePrintSq
4a40: 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  l(p);.    if( p-
4a50: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
4a60: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
4a70: 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28  ){.      printf(
4a80: 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69  "VDBE Program Li
4a90: 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20  sting:\n");.    
4aa0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
4ab0: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
4ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4ad0: 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c  intOp(stdout, i,
4ae0: 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20   &aOp[i]);.     
4af0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
4b00: 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20   p->db->flags & 
4b10: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 29  SQLITE_VdbeEQP )
4b20: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  {.      for(i=0;
4b30: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
4b40: 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f 70  .        if( aOp
4b50: 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  [i].opcode==OP_E
4b60: 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20  xplain ){.      
4b70: 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20 70      if( once ) p
4b80: 72 69 6e 74 66 28 22 56 44 42 45 20 51 75 65 72  rintf("VDBE Quer
4b90: 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20  y Plan:\n");.   
4ba0: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
4bb0: 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e  s\n", aOp[i].p4.
4bc0: 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 6e  z);.          on
4bd0: 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ce = 0;.        
4be0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
4bf0: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
4c00: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
4c10: 62 65 54 72 61 63 65 20 29 20 20 70 72 69 6e 74  beTrace )  print
4c20: 66 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c 6e  f("VDBE Trace:\n
4c30: 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ");.  }.  sqlite
4c40: 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
4c50: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72  ();.#endif.  for
4c60: 28 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53  (pc=p->pc; rc==S
4c70: 51 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b  QLITE_OK; pc++){
4c80: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e  .    assert( pc>
4c90: 3d 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20  =0 && pc<p->nOp 
4ca0: 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d  );.    if( db->m
4cb0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
4cc0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65  to no_mem;.#ifde
4cd0: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
4ce0: 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74     start = sqlit
4cf0: 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64  e3Hwtime();.#end
4d00: 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b  if.    nVmStep++
4d10: 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70  ;.    pOp = &aOp
4d20: 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e  [pc];..    /* On
4d30: 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67  ly allow tracing
4d40: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
4d50: 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
4d60: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4d70: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
4d80: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4d90: 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a  TE_VdbeTrace ){.
4da0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4db0: 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
4dc0: 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d   pc, pOp);.    }
4dd0: 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a  .#endif.      ..
4de0: 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20      /* Check to 
4df0: 73 65 65 20 69 66 20 77 65 20 6e 65 65 64 20 74  see if we need t
4e00: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
4e10: 74 65 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f  terrupt.  This o
4e20: 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20  nly happens.    
4e30: 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20  ** if we have a 
4e40: 73 70 65 63 69 61 6c 20 74 65 73 74 20 62 75 69  special test bui
4e50: 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65  ld..    */.#ifde
4e60: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
4e70: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e    if( sqlite3_in
4e80: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20  terrupt_count>0 
4e90: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
4ea0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
4eb0: 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71  --;.      if( sq
4ec0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
4ed0: 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20  count==0 ){.    
4ee0: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65      sqlite3_inte
4ef0: 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20  rrupt(db);.     
4f00: 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a   }.    }.#endif.
4f10: 0a 20 20 20 20 2f 2a 20 4f 6e 20 61 6e 79 20 6f  .    /* On any o
4f20: 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 22  pcode with the "
4f30: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 22  out2-prerelease"
4f40: 20 74 61 67 2c 20 66 72 65 65 20 61 6e 79 0a 20   tag, free any. 
4f50: 20 20 20 2a 2a 20 65 78 74 65 72 6e 61 6c 20 61     ** external a
4f60: 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f 75 74 20 6f  llocations out o
4f70: 66 20 6d 65 6d 5b 70 32 5d 20 61 6e 64 20 73 65  f mem[p2] and se
4f80: 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 62 65 0a  t mem[p2] to be.
4f90: 20 20 20 20 2a 2a 20 61 6e 20 75 6e 64 65 66 69      ** an undefi
4fa0: 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20 4f 70  ned integer.  Op
4fb0: 63 6f 64 65 73 20 77 69 6c 6c 20 65 69 74 68 65  codes will eithe
4fc0: 72 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 69 6e  r fill in the in
4fd0: 74 65 67 65 72 0a 20 20 20 20 2a 2a 20 76 61 6c  teger.    ** val
4fe0: 75 65 20 6f 72 20 63 6f 6e 76 65 72 74 20 6d 65  ue or convert me
4ff0: 6d 5b 70 32 5d 20 74 6f 20 61 20 64 69 66 66 65  m[p2] to a diffe
5000: 72 65 6e 74 20 74 79 70 65 2e 0a 20 20 20 20 2a  rent type..    *
5010: 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  /.    assert( pO
5020: 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71 6c 69  p->opflags==sqli
5030: 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
5040: 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 20 29  y[pOp->opcode] )
5050: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
5060: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
5070: 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 20 29  UT2_PRERELEASE )
5080: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5090: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
50a0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
50b0: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
50c0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
50d0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
50e0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 6d  Op->p2];.      m
50f0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
5100: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  p, pOut);.      
5110: 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  if( VdbeMemDynam
5120: 69 63 28 70 4f 75 74 29 20 29 20 73 71 6c 69 74  ic(pOut) ) sqlit
5130: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
5140: 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f  (pOut);.      pO
5150: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
5160: 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  Int;.    }..    
5170: 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69  /* Sanity checki
5180: 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72  ng on other oper
5190: 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ands */.#ifdef S
51a0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
51b0: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
51c0: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d  s & OPFLG_IN1)!=
51d0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
51e0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
51f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5200: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p1<=(p->nMem-
5210: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5220: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
5230: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
5240: 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20  p->p1]) );.     
5250: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
5260: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
5270: 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70  riants(&aMem[pOp
5280: 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p1]) );.      
5290: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
52a0: 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p1, &aMem[pO
52b0: 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p1]);.    }. 
52c0: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
52d0: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32  lags & OPFLG_IN2
52e0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
52f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5300: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5310: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
5320: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
5330: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5340: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
5350: 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20  [pOp->p2]) );.  
5360: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
5370: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
5380: 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b  nvariants(&aMem[
5390: 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20  pOp->p2]) );.   
53a0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
53b0: 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  E(pOp->p2, &aMem
53c0: 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
53d0: 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  }.    if( (pOp->
53e0: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
53f0: 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN3)!=0 ){.     
5400: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5410: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5420: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
5430: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
5440: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
5450: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5460: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
5470: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
5480: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
5490: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
54a0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
54b0: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
54c0: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
54d0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
54e0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
54f0: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5500: 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20  LG_OUT2)!=0 ){. 
5510: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5520: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
5530: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5540: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5550: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d  rsor) );.      m
5560: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
5570: 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  p, &aMem[pOp->p2
5580: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5590: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
55a0: 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30  & OPFLG_OUT3)!=0
55b0: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
55c0: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
55d0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
55e0: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
55f0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
5600: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
5610: 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
5620: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23  p->p3]);.    }.#
5630: 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69  endif.  .    swi
5640: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
5650: 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ){../**********
5660: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5670: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5680: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5690: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56a0: 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c  ***.** What foll
56b0: 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69 76 65  ows is a massive
56c0: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
56d0: 74 20 77 68 65 72 65 20 65 61 63 68 20 63 61 73  t where each cas
56e0: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a  e implements a.*
56f0: 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73 74 72  * separate instr
5700: 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69  uction in the vi
5710: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
5720: 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65  If we follow the
5730: 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74   usual.** indent
5740: 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e  ation convention
5750: 73 2c 20 65 61 63 68 20 63 61 73 65 20 73 68 6f  s, each case sho
5760: 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20  uld be indented 
5770: 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
5780: 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c  t.** that is a l
5790: 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73 70 61  ot of wasted spa
57a0: 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d  ce on the left m
57b0: 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63  argin.  So the c
57c0: 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68  ode within.** th
57d0: 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
57e0: 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69  nt will break wi
57f0: 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e  th convention an
5800: 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e  d be flush-left.
5810: 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20   Another.** big 
5820: 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72  comment (similar
5830: 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69   to this one) wi
5840: 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e  ll mark the poin
5850: 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68  t in the code wh
5860: 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69  ere.** we transi
5870: 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72  tion back to nor
5880: 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e  mal indentation.
5890: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61  .**.** The forma
58a0: 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61  tting of each ca
58b0: 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e  se is important.
58c0: 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66    The makefile f
58d0: 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e  or SQLite.** gen
58e0: 65 72 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c  erates two C fil
58f0: 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61  es "opcodes.h" a
5900: 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62  nd "opcodes.c" b
5910: 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a  y scanning this.
5920: 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20  ** file looking 
5930: 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62  for lines that b
5940: 65 67 69 6e 20 77 69 74 68 20 22 63 61 73 65 20  egin with "case 
5950: 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64  OP_".  The opcod
5960: 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69  es.h files.** wi
5970: 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74  ll be filled wit
5980: 68 20 23 64 65 66 69 6e 65 73 20 74 68 61 74 20  h #defines that 
5990: 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65  give unique inte
59a0: 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61  ger values to ea
59b0: 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64  ch.** opcode and
59c0: 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66   the opcodes.c f
59d0: 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69  ile is filled wi
59e0: 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73  th an array of s
59f0: 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20  trings where.** 
5a00: 65 61 63 68 20 73 74 72 69 6e 67 20 69 73 20 74  each string is t
5a10: 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65  he symbolic name
5a20: 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70   for the corresp
5a30: 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20  onding opcode.  
5a40: 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73  If the.** case s
5a50: 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c  tatement is foll
5a60: 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e  owed by a commen
5a70: 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f  t of the form "/
5a80: 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f  # same as ... #/
5a90: 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e  ".** that commen
5aa0: 74 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  t is used to det
5ab0: 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69  ermine the parti
5ac0: 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74  cular value of t
5ad0: 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  he opcode..**.**
5ae0: 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20   Other keywords 
5af0: 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  in the comment t
5b00: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68  hat follows each
5b10: 20 63 61 73 65 20 61 72 65 20 75 73 65 64 20 74   case are used t
5b20: 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74  o.** construct t
5b30: 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c  he OPFLG_INITIAL
5b40: 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61 74 20  IZER value that 
5b50: 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f  initializes opco
5b60: 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a  deProperty[]..**
5b70: 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64   Keywords includ
5b80: 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33  e: in1, in2, in3
5b90: 2c 20 6f 75 74 32 5f 70 72 65 72 65 6c 65 61 73  , out2_prereleas
5ba0: 65 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20  e, out2, out3.  
5bb0: 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63  See.** the mkopc
5bc0: 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20  odeh.awk script 
5bd0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
5be0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
5bf0: 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  * Documentation 
5c00: 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64  about VDBE opcod
5c10: 65 73 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  es is generated 
5c20: 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73  by scanning this
5c30: 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e   file.** for lin
5c40: 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61  es of that conta
5c50: 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54  in "Opcode:".  T
5c60: 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c  hat line and all
5c70: 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63   subsequent.** c
5c80: 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65  omment lines are
5c90: 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
5ca0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f  eration of the o
5cb0: 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d  pcode.html docum
5cc0: 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65  entation.** file
5cd0: 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a  ..**.** SUMMARY:
5ce0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61  .**.**     Forma
5cf0: 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61  tting is importa
5d00: 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20 74 68  nt to scripts th
5d10: 61 74 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c  at scan this fil
5d20: 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74  e..**     Do not
5d30: 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68   deviate from th
5d40: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79  e formatting sty
5d50: 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  le currently in 
5d60: 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  use..**.********
5d70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5da0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5db0: 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  *****/../* Opcod
5dc0: 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20  e:  Goto * P2 * 
5dd0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63  * *.**.** An unc
5de0: 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20  onditional jump 
5df0: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  to address P2..*
5e00: 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72  * The next instr
5e10: 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20  uction executed 
5e20: 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20  will be .** the 
5e30: 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32 20  one at index P2 
5e40: 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
5e50: 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f  ng of.** the pro
5e60: 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  gram..**.** The 
5e70: 50 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  P1 parameter is 
5e80: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75 73 65  not actually use
5e90: 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
5ea0: 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a  .  However, it.*
5eb0: 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 73  * is sometimes s
5ec0: 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64 20  et to 1 instead 
5ed0: 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74 20 74  of 0 as a hint t
5ee0: 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69  o the command-li
5ef0: 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74  ne shell.** that
5f00: 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20 74 68   this Goto is th
5f10: 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f  e bottom of a lo
5f20: 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  op and that the 
5f30: 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20 64 6f  lines from P2 do
5f40: 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75 72  wn.** to the cur
5f50: 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64  rent line should
5f60: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66 6f 72   be indented for
5f70: 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e   EXPLAIN output.
5f80: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f  .*/.case OP_Goto
5f90: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
5fa0: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 70 63 20  /* jump */.  pc 
5fb0: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 0a  = pOp->p2 - 1;..
5fc0: 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61    /* Opcodes tha
5fd0: 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  t are used as th
5fe0: 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f  e bottom of a lo
5ff0: 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f  op (OP_Next, OP_
6000: 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e  Prev,.  ** OP_VN
6010: 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65  ext, OP_RowSetNe
6020: 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72  xt, or OP_Sorter
6030: 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68  Next) all jump h
6040: 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f  ere upon.  ** co
6050: 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b  mpletion.  Check
6060: 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74   to see if sqlit
6070: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68  e3_interrupt() h
6080: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20  as been called. 
6090: 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72   ** or if the pr
60a0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
60b0: 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f  needs to be invo
60c0: 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ked. .  **.  ** 
60d0: 54 68 69 73 20 63 6f 64 65 20 75 73 65 73 20 75  This code uses u
60e0: 6e 73 74 72 75 63 74 75 72 65 64 20 22 67 6f 74  nstructured "got
60f0: 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e  o" statements an
6100: 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20  d does not look 
6110: 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20  clean..  ** But 
6120: 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20  that is not due 
6130: 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67  to sloppy coding
6140: 20 68 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64   habits. The cod
6150: 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68 69  e is written thi
6160: 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70  s.  ** way for p
6170: 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61  erformance, to a
6180: 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72  void having to r
6190: 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75 70 74  un the interrupt
61a0: 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20   and progress.  
61b0: 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65  ** checks on eve
61c0: 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73  ry opcode.  This
61d0: 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73   helps sqlite3_s
61e0: 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f  tep() to run abo
61f0: 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73  ut 1.5%.  ** fas
6200: 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ter according to
6210: 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f   "valgrind --too
6220: 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f  l=cachegrind" */
6230: 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  .check_for_inter
6240: 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e  rupt:.  if( db->
6250: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
6260: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
6270: 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a  e_to_interrupt;.
6280: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
6290: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
62a0: 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20  LBACK.  /* Call 
62b0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
62c0: 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73 20 63  lback if it is c
62d0: 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74 68  onfigured and th
62e0: 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65  e required numbe
62f0: 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f  r.  ** of VDBE o
6300: 70 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65  ps have been exe
6310: 63 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69  cuted (either si
6320: 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74  nce this invocat
6330: 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69  ion of.  ** sqli
6340: 74 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72  te3VdbeExec() or
6350: 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65   since last time
6360: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
6370: 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65  llback was calle
6380: 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  d)..  ** If the 
6390: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
63a0: 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  k returns non-ze
63b0: 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72  ro, exit the vir
63c0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74  tual machine wit
63d0: 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20  h.  ** a return 
63e0: 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52  code SQLITE_ABOR
63f0: 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62  T..  */.  if( db
6400: 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 20 26  ->xProgress!=0 &
6410: 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67  & nVmStep>=nProg
6420: 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20  ressLimit ){.   
6430: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72   assert( db->nPr
6440: 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a  ogressOps!=0 );.
6450: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
6460: 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64  it = nVmStep + d
6470: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
6480: 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e  - (nVmStep%db->n
6490: 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20  ProgressOps);.  
64a0: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
64b0: 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73  ess(db->pProgres
64c0: 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72  sArg) ){.      r
64d0: 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
64e0: 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  RUPT;.      goto
64f0: 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
6500: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
6510: 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d  if.  .  break;.}
6520: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
6530: 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  sub P1 P2 * * *.
6540: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
6550: 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20  current address 
6560: 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 31  onto register P1
6570: 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d  .** and then jum
6580: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
6590: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75  .*/.case OP_Gosu
65a0: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
65b0: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
65c0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
65d0: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
65e0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
65f0: 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
6600: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
6610: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
6620: 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b  amic(pIn1)==0 );
6630: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
6640: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
6650: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
6660: 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75  M_Int;.  pIn1->u
6670: 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53  .i = pc;.  REGIS
6680: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
6690: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d  1, pIn1);.  pc =
66a0: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
66b0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
66c0: 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20  ode:  Return P1 
66d0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75  * * * *.**.** Ju
66e0: 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  mp to the next i
66f0: 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72  nstruction after
6700: 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20   the address in 
6710: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 41 66  register P1.  Af
6720: 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c  ter.** the jump,
6730: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63   register P1 bec
6740: 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  omes undefined..
6750: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72  */.case OP_Retur
6760: 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  n: {           /
6770: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
6780: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6790: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
67a0: 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
67b0: 20 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74 29   );.  pc = (int)
67c0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
67d0: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
67e0: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
67f0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6800: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50   InitCoroutine P
6810: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
6820: 2a 20 53 65 74 20 75 70 20 72 65 67 69 73 74 65  * Set up registe
6830: 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
6840: 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68  will Yield to th
6850: 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c  e coroutine.** l
6860: 6f 63 61 74 65 64 20 61 74 20 61 64 64 72 65 73  ocated at addres
6870: 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  s P3..**.** If P
6880: 32 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f  2!=0 then the co
6890: 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e  routine implemen
68a0: 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65  tation immediate
68b0: 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68  ly follows.** th
68c0: 69 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a  is opcode.  So j
68d0: 75 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72  ump over the cor
68e0: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
68f0: 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72  ation to.** addr
6900: 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ess P2..**.** Se
6910: 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75  e also: EndCorou
6920: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
6930: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b  InitCoroutine: {
6940: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
6950: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6960: 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c  1>0 &&  pOp->p1<
6970: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
6980: 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72  rsor) );.  asser
6990: 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26  t( pOp->p2>=0 &&
69a0: 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20   pOp->p2<p->nOp 
69b0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
69c0: 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p3>=0 && pOp->
69d0: 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  p3<p->nOp );.  p
69e0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
69f0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6a00: 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28  !VdbeMemDynamic(
6a10: 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d  pOut) );.  pOut-
6a20: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d  >u.i = pOp->p3 -
6a30: 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   1;.  pOut->flag
6a40: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69  s = MEM_Int;.  i
6a50: 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 70 63 20  f( pOp->p2 ) pc 
6a60: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
6a70: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6a80: 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74  code:  EndCorout
6a90: 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ine P1 * * * *.*
6aa0: 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63  *.** The instruc
6ab0: 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72  tion at the addr
6ac0: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
6ad0: 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a  P1 is a Yield..*
6ae0: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50 32  * Jump to the P2
6af0: 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74 68   parameter of th
6b00: 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74  at Yield..** Aft
6b10: 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  er the jump, reg
6b20: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
6b30: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a   undefined..**.*
6b40: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
6b50: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
6b60: 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e  e OP_EndCoroutin
6b70: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  e: {           /
6b80: 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f  * in1 */.  VdbeO
6b90: 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49  p *pCaller;.  pI
6ba0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6bb0: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
6bc0: 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  In1->flags==MEM_
6bd0: 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
6be0: 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26   pIn1->u.i>=0 &&
6bf0: 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f   pIn1->u.i<p->nO
6c00: 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d  p );.  pCaller =
6c10: 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d   &aOp[pIn1->u.i]
6c20: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c  ;.  assert( pCal
6c30: 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  ler->opcode==OP_
6c40: 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65 72  Yield );.  asser
6c50: 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d  t( pCaller->p2>=
6c60: 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32  0 && pCaller->p2
6c70: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 63 20  <p->nOp );.  pc 
6c80: 3d 20 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20  = pCaller->p2 - 
6c90: 31 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  1;.  pIn1->flags
6ca0: 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
6cb0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6cc0: 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20   Opcode:  Yield 
6cd0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
6ce0: 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72  * Swap the progr
6cf0: 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20  am counter with 
6d00: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
6d10: 69 73 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a  ister P1.  This.
6d20: 2a 2a 20 68 61 73 20 74 68 65 20 65 66 66 65 63  ** has the effec
6d30: 74 20 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f  t of yielding to
6d40: 20 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a   a coroutine..**
6d50: 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75  .** If the corou
6d60: 74 69 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75  tine that is lau
6d70: 6e 63 68 65 64 20 62 79 20 74 68 69 73 20 69 6e  nched by this in
6d80: 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77  struction ends w
6d90: 69 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20  ith.** Yield or 
6da0: 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74  Return then cont
6db0: 69 6e 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74  inue to the next
6dc0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
6dd0: 75 74 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72  ut if.** the cor
6de0: 6f 75 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20  outine launched 
6df0: 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
6e00: 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a  ion ends with.**
6e10: 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74   EndCoroutine, t
6e20: 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72  hen jump to P2 r
6e30: 61 74 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69  ather than conti
6e40: 6e 75 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a  nuing with the.*
6e50: 2a 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  * next instructi
6e60: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
6e70: 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e  so: InitCoroutin
6e80: 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65  e.*/.case OP_Yie
6e90: 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ld: {           
6ea0: 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f   /* in1, jump */
6eb0: 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20  .  int pcDest;. 
6ec0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
6ed0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6ee0: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
6ef0: 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70  (pIn1)==0 );.  p
6f00: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6f10: 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d  _Int;.  pcDest =
6f20: 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b   (int)pIn1->u.i;
6f30: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70  .  pIn1->u.i = p
6f40: 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  c;.  REGISTER_TR
6f50: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
6f60: 31 29 3b 0a 20 20 70 63 20 3d 20 70 63 44 65 73  1);.  pc = pcDes
6f70: 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  t;.  break;.}../
6f80: 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49  * Opcode:  HaltI
6f90: 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20  fNull  P1 P2 P3 
6fa0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
6fb0: 73 3a 20 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c  s:  if r[P3]=nul
6fc0: 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65  l halt.**.** Che
6fd0: 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ck the value in 
6fe0: 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49 66  register P3.  If
6ff0: 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   it is NULL then
7000: 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70   Halt using.** p
7010: 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c  arameter P1, P2,
7020: 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74 68   and P4 as if th
7030: 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20 69  is were a Halt i
7040: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20  nstruction.  If 
7050: 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
7060: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6e  register P3 is n
7070: 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
7080: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20  is routine is a 
7090: 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35  no-op..** The P5
70a0: 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75 6c   parameter shoul
70b0: 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20  d be 1..*/.case 
70c0: 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b  OP_HaltIfNull: {
70d0: 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
70e0: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
70f0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
7100: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
7110: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65  M_Null)==0 ) bre
7120: 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ak;.  /* Fall th
7130: 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61  rough into OP_Ha
7140: 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  lt */.}../* Opco
7150: 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20  de:  Halt P1 P2 
7160: 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  * P4 P5.**.** Ex
7170: 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  it immediately. 
7180: 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72   All open cursor
7190: 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65  s, etc are close
71a0: 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  d.** automatical
71b0: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ly..**.** P1 is 
71c0: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20  the result code 
71d0: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
71e0: 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69  te3_exec(), sqli
71f0: 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20  te3_reset(),.** 
7200: 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  or sqlite3_final
7210: 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f  ize().  For a no
7220: 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20  rmal halt, this 
7230: 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45  should be SQLITE
7240: 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20  _OK (0)..** For 
7250: 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62  errors, it can b
7260: 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c  e some other val
7270: 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68  ue.  If P1!=0 th
7280: 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72  en P2 will deter
7290: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
72a0: 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61  or not to rollba
72b0: 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
72c0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20  ransaction.  Do 
72d0: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  not rollback.** 
72e0: 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20  if P2==OE_Fail. 
72f0: 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  Do the rollback 
7300: 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  if P2==OE_Rollba
7310: 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41  ck.  If P2==OE_A
7320: 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61  bort,.** then ba
7330: 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67  ck out all chang
7340: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
7350: 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69  urred during thi
7360: 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74  s execution of t
7370: 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20  he.** VDBE, but 
7380: 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  do not rollback 
7390: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
73a0: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73   .**.** If P4 is
73b0: 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69   not null then i
73c0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65  t is an error me
73d0: 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a  ssage string..**
73e0: 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c 75  .** P5 is a valu
73f0: 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20  e between 0 and 
7400: 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74 68  4, inclusive, th
7410: 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20  at modifies the 
7420: 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  P4 string..**.**
7430: 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e      0:  (no chan
7440: 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f  ge).**    1:  NO
7450: 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74  T NULL contraint
7460: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
7470: 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e    2:  UNIQUE con
7480: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  straint failed: 
7490: 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48 45  P4.**    3:  CHE
74a0: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  CK constraint fa
74b0: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34  iled: P4.**    4
74c0: 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  :  FOREIGN KEY c
74d0: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
74e0: 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  : P4.**.** If P5
74f0: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64   is not zero and
7500: 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65   P4 is NULL, the
7510: 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61 66 74  n everything aft
7520: 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a  er the ":" is.**
7530: 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20   omitted..**.** 
7540: 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c  There is an impl
7550: 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22  ied "Halt 0 0 0"
7560: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73   instruction ins
7570: 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72  erted at the ver
7580: 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72  y end of.** ever
7590: 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61  y program.  So a
75a0: 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c   jump past the l
75b0: 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ast instruction 
75c0: 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a  of the program.*
75d0: 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  * is the same as
75e0: 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e   executing Halt.
75f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
7600: 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  : {.  const char
7610: 20 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74   *zType;.  const
7620: 20 63 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a   char *zLogFmt;.
7630: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
7640: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e  SQLITE_OK && p->
7650: 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a  pFrame ){.    /*
7660: 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72   Halt the sub-pr
7670: 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f  ogram. Return co
7680: 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72  ntrol to the par
7690: 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20  ent frame. */.  
76a0: 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
76b0: 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
76c0: 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  .    p->pFrame =
76d0: 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
76e0: 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d  ;.    p->nFrame-
76f0: 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  -;.    sqlite3Vd
7700: 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
7710: 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
7720: 20 20 70 63 20 3d 20 73 71 6c 69 74 65 33 56 64    pc = sqlite3Vd
7730: 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70  beFrameRestore(p
7740: 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74  Frame);.    last
7750: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
7760: 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70  Rowid;.    if( p
7770: 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p2==OE_Ignor
7780: 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e  e ){.      /* In
7790: 73 74 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20  struction pc is 
77a0: 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74  the OP_Program t
77b0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20  hat invoked the 
77c0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20  sub-program .   
77d0: 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20     ** currently 
77e0: 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66  being halted. If
77f0: 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74   the p2 instruct
7800: 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48  ion of this OP_H
7810: 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73  alt.      ** ins
7820: 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20  truction is set 
7830: 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68  to OE_Ignore, th
7840: 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  en the sub-progr
7850: 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20  am is throwing. 
7860: 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52       ** an IGNOR
7870: 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20  E exception. In 
7880: 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74  this case jump t
7890: 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70  o the address sp
78a0: 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a  ecified.      **
78b0: 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68   as the p2 of th
78c0: 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  e calling OP_Pro
78d0: 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20  gram.  */.      
78e0: 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e  pc = p->aOp[pc].
78f0: 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2-1;.    }.    
7900: 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
7910: 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d    aMem = p->aMem
7920: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
7930: 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e  .  p->rc = pOp->
7940: 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63  p1;.  p->errorAc
7950: 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e  tion = (u8)pOp->
7960: 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63  p2;.  p->pc = pc
7970: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b  ;.  if( p->rc ){
7980: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
7990: 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63   ){.      static
79a0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f   const char * co
79b0: 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b  nst azType[] = {
79c0: 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e   "NOT NULL", "UN
79d0: 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a  IQUE", "CHECK",.
79e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 4f               "FO
7a10: 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20  REIGN KEY" };.  
7a20: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
7a30: 3e 70 35 3e 3d 31 20 26 26 20 70 4f 70 2d 3e 70  >p5>=1 && pOp->p
7a40: 35 3c 3d 34 20 29 3b 0a 20 20 20 20 20 20 74 65  5<=4 );.      te
7a50: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
7a60: 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =1 );.      test
7a70: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32  case( pOp->p5==2
7a80: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
7a90: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29  se( pOp->p5==3 )
7aa0: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
7ab0: 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a  ( pOp->p5==4 );.
7ac0: 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20 61 7a        zType = az
7ad0: 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 3b  Type[pOp->p5-1];
7ae0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
7af0: 20 20 7a 54 79 70 65 20 3d 20 30 3b 0a 20 20 20    zType = 0;.   
7b00: 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a   }.    assert( z
7b10: 54 79 70 65 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e  Type!=0 || pOp->
7b20: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 20 20 7a  p4.z!=0 );.    z
7b30: 4c 6f 67 46 6d 74 20 3d 20 22 61 62 6f 72 74 20  LogFmt = "abort 
7b40: 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25  at %d in [%s]: %
7b50: 73 22 3b 0a 20 20 20 20 69 66 28 20 7a 54 79 70  s";.    if( zTyp
7b60: 65 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  e && pOp->p4.z )
7b70: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
7b80: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
7b90: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 20 63 6f  rMsg, db, "%s co
7ba0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
7bb0: 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20   %s", .         
7bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 54                zT
7bd0: 79 70 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  ype, pOp->p4.z);
7be0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70  .    }else if( p
7bf0: 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
7c00: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
7c10: 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
7c20: 64 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70  db, "%s", pOp->p
7c30: 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  4.z);.    }else{
7c40: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
7c50: 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
7c60: 4d 73 67 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e  Msg, db, "%s con
7c70: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c  straint failed",
7c80: 20 7a 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a 20   zType);.    }. 
7c90: 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70     sqlite3_log(p
7ca0: 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74 2c  Op->p1, zLogFmt,
7cb0: 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d   pc, p->zSql, p-
7cc0: 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20  >zErrMsg);.  }. 
7cd0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
7ce0: 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65  eHalt(p);.  asse
7cf0: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  rt( rc==SQLITE_B
7d00: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
7d10: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
7d20: 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66  TE_ERROR );.  if
7d30: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
7d40: 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d  Y ){.    p->rc =
7d50: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
7d60: 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
7d70: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
7d80: 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26  TE_OK || (p->rc&
7d90: 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
7da0: 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20  NSTRAINT );.    
7db0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
7dc0: 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65  TE_OK || db->nDe
7dd0: 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20  ferredCons>0 || 
7de0: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
7df0: 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63  Cons>0 );.    rc
7e00: 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54   = p->rc ? SQLIT
7e10: 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45  E_ERROR : SQLITE
7e20: 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74  _DONE;.  }.  got
7e30: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
7e40: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
7e50: 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  eger P1 P2 * * *
7e60: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
7e70: 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65  P2]=P1.**.** The
7e80: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
7e90: 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74  value P1 is writ
7ea0: 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ten into registe
7eb0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7ec0: 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20  _Integer: {     
7ed0: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7ee0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
7ef0: 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  ->u.i = pOp->p1;
7f00: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7f10: 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20  Opcode: Int64 * 
7f20: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
7f30: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a  opsis: r[P2]=P4.
7f40: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
7f50: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
7f60: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
7f70: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
7f80: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
7f90: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
7fa0: 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20  P_Int64: {      
7fb0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
7fc0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
7fd0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36  ert( pOp->p4.pI6
7fe0: 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  4!=0 );.  pOut->
7ff0: 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.i = *pOp->p4.p
8000: 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  I64;.  break;.}.
8010: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
8020: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
8030: 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  INT./* Opcode: R
8040: 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  eal * P2 * P4 *.
8050: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
8060: 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69  2]=P4.**.** P4 i
8070: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
8080: 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67   64-bit floating
8090: 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a   point value..**
80a0: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
80b0: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
80c0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
80d0: 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eal: {          
80e0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
80f0: 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72  FLOAT, out2-prer
8100: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
8110: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65  ->flags = MEM_Re
8120: 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73  al;.  assert( !s
8130: 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70  qlite3IsNaN(*pOp
8140: 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20  ->p4.pReal) );. 
8150: 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f   pOut->u.r = *pO
8160: 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62  p->p4.pReal;.  b
8170: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
8180: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
8190: 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g8 * P2 * P4 *.*
81a0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
81b0: 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20  ]='P4'.**.** P4 
81c0: 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20  points to a nul 
81d0: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
81e0: 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70   string. This op
81f0: 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72  code is transfor
8200: 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 20 53  med .** into a S
8210: 74 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20  tring before it 
8220: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
8230: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20  the first time. 
8240: 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20   During.** this 
8250: 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20  transformation, 
8260: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74  the length of st
8270: 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75  ring P4 is compu
8280: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a  ted and stored.*
8290: 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61  * as the P1 para
82a0: 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  meter..*/.case O
82b0: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
82c0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
82d0: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d  TK_STRING, out2-
82e0: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
82f0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8300: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f  z!=0 );.  pOp->o
8310: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
8320: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
8330: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
8340: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
8350: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
8360: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
8370: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
8380: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
8390: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
83a0: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
83b0: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
83c0: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
83d0: 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  IC);.    if( rc=
83e0: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
83f0: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
8400: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
8410: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  !=sqlite3VdbeCha
8420: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
8430: 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f  , encoding) ) go
8440: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
8450: 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d  ssert( pOut->szM
8460: 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d  alloc>0 && pOut-
8470: 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e  >zMalloc==pOut->
8480: 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  z );.    assert(
8490: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
84a0: 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  pOut)==0 );.    
84b0: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d  pOut->szMalloc =
84c0: 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   0;.    pOut->fl
84d0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
84e0: 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  c;.    if( pOp->
84f0: 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d  p4type==P4_DYNAM
8500: 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  IC ){.      sqli
8510: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f  te3DbFree(db, pO
8520: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a  p->p4.z);.    }.
8530: 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20      pOp->p4type 
8540: 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20  = P4_DYNAMIC;.  
8550: 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f    pOp->p4.z = pO
8560: 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e  ut->z;.    pOp->
8570: 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20  p1 = pOut->n;.  
8580: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
8590: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
85a0: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
85b0: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
85c0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
85d0: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
85e0: 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  h to the next ca
85f0: 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f  se, OP_String */
8600: 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a  .}.  ./* Opcode:
8610: 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20   String P1 P2 * 
8620: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
8630: 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65  : r[P2]='P4' (le
8640: 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n=P1).**.** The 
8650: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20  string value P4 
8660: 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79  of length P1 (by
8670: 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69  tes) is stored i
8680: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
8690: 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67  /.case OP_String
86a0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
86b0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
86c0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
86d0: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
86e0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
86f0: 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
8700: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
8710: 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ->z = pOp->p4.z;
8720: 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70  .  pOut->n = pOp
8730: 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  ->p1;.  pOut->en
8740: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
8750: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
8760: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
8770: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8780: 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20  : Null P1 P2 P3 
8790: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
87a0: 20 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c    r[P2..P3]=NULL
87b0: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e  .**.** Write a N
87c0: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
87d0: 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72  rs P2.  If P3 gr
87e0: 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74  eater than P2, t
87f0: 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a  hen also write.*
8800: 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69  * NULL into regi
8810: 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72  ster P3 and ever
8820: 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65  y register in be
8830: 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e  tween P2 and P3.
8840: 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65    If P3.** is le
8850: 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69  ss than P2 (typi
8860: 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f  cally P3 is zero
8870: 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69  ) then only regi
8880: 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65  ster P2 is.** se
8890: 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t to NULL..**.**
88a0: 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   If the P1 value
88b0: 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
88c0: 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20  en also set the 
88d0: 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67  MEM_Cleared flag
88e0: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c   so that.** NULL
88f0: 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74   values will not
8900: 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65   compare equal e
8910: 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55  ven if SQLITE_NU
8920: 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a  LLEQ is set on.*
8930: 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71  * OP_Ne or OP_Eq
8940: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
8950: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  l: {           /
8960: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
8970: 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a  e */.  int cnt;.
8980: 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a    u16 nullFlag;.
8990: 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d    cnt = pOp->p3-
89a0: 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
89b0: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
89c0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
89d0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
89e0: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70  s = nullFlag = p
89f0: 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75  Op->p1 ? (MEM_Nu
8a00: 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20  ll|MEM_Cleared) 
8a10: 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68  : MEM_Null;.  wh
8a20: 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20  ile( cnt>0 ){.  
8a30: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65    pOut++;.    me
8a40: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
8a50: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
8a60: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
8a70: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f  ll(pOut);.    pO
8a80: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
8a90: 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b  Flag;.    cnt--;
8aa0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
8ab0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74  ./* Opcode: Soft
8ac0: 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Null P1 * * * *.
8ad0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
8ae0: 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53  P1]=NULL.**.** S
8af0: 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20 74  et register P1 t
8b00: 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75 65  o have the value
8b10: 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79   NULL as seen by
8b20: 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
8b30: 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  rd.** instructio
8b40: 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72  n, but do not fr
8b50: 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  ee any string or
8b60: 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73   blob memory ass
8b70: 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20  ociated with.** 
8b80: 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f  the register, so
8b90: 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61 6c   that if the val
8ba0: 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67 20  ue was a string 
8bb0: 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73  or blob that was
8bc0: 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63  .** previously c
8bd0: 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53  opied using OP_S
8be0: 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73  Copy, the copies
8bf0: 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74   will continue t
8c00: 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63  o be valid..*/.c
8c10: 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a  ase OP_SoftNull:
8c20: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
8c30: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
8c40: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  1<=(p->nMem-p->n
8c50: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
8c60: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
8c70: 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  1];.  pOut->flag
8c80: 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73  s = (pOut->flags
8c90: 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d 5f  |MEM_Null)&~MEM_
8ca0: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
8cb0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8cc0: 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50  : Blob P1 P2 * P
8cd0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
8ce0: 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50   r[P2]=P4 (len=P
8cf0: 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  1).**.** P4 poin
8d00: 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20  ts to a blob of 
8d10: 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f  data P1 bytes lo
8d20: 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a  ng.  Store this.
8d30: 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  ** blob in regis
8d40: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8d50: 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  OP_Blob: {      
8d60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
8d70: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
8d80: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8d90: 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f  1 <= SQLITE_MAX_
8da0: 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69  LENGTH );.  sqli
8db0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
8dc0: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
8dd0: 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29  , pOp->p1, 0, 0)
8de0: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
8df0: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
8e00: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
8e10: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
8e20: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  }../* Opcode: Va
8e30: 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50  riable P1 P2 * P
8e40: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
8e50: 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72   r[P2]=parameter
8e60: 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72  (P1,P4).**.** Tr
8e70: 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65  ansfer the value
8e80: 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d  s of bound param
8e90: 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  eter P1 into reg
8ea0: 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49  ister P2.**.** I
8eb0: 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f the parameter 
8ec0: 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69  is named, then i
8ed0: 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20  ts name appears 
8ee0: 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34  in P4..** The P4
8ef0: 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62   value is used b
8f00: 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  y sqlite3_bind_p
8f10: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e  arameter_name().
8f20: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69  .*/.case OP_Vari
8f30: 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20  able: {         
8f40: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
8f50: 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a  lease */.  Mem *
8f60: 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56  pVar;       /* V
8f70: 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73  alue being trans
8f80: 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73  ferred */..  ass
8f90: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
8fa0: 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56  & pOp->p1<=p->nV
8fb0: 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ar );.  assert( 
8fc0: 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20  pOp->p4.z==0 || 
8fd0: 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61 7a  pOp->p4.z==p->az
8fe0: 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20 29  Var[pOp->p1-1] )
8ff0: 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61  ;.  pVar = &p->a
9000: 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d  Var[pOp->p1 - 1]
9010: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
9020: 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61  dbeMemTooBig(pVa
9030: 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  r) ){.    goto t
9040: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 73 71  oo_big;.  }.  sq
9050: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
9060: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56  lowCopy(pOut, pV
9070: 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  ar, MEM_Static);
9080: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
9090: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
90a0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
90b0: 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20  ode: Move P1 P2 
90c0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
90d0: 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72 5b  is:  r[P2@P3]=r[
90e0: 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76  P1@P3].**.** Mov
90f0: 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73 20  e the P3 values 
9100: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e  in register P1..
9110: 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74  P1+P3-1 over int
9120: 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50  o.** registers P
9130: 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67  2..P2+P3-1.  Reg
9140: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  isters P1..P1+P3
9150: 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68  -1 are.** left h
9160: 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20  olding a NULL.  
9170: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
9180: 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67  or register rang
9190: 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d  es.** P1..P1+P3-
91a0: 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d  1 and P2..P2+P3-
91b0: 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49  1 to overlap.  I
91c0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a  t is an error.**
91d0: 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65   for P3 to be le
91e0: 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61  ss than 1..*/.ca
91f0: 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20  se OP_Move: {.  
9200: 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
9210: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
9220: 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20  gisters left to 
9230: 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31  copy */.  int p1
9240: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
9250: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66  gister to copy f
9260: 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  rom */.  int p2;
9270: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
9280: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f  ister to copy to
9290: 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   */..  n = pOp->
92a0: 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  p3;.  p1 = pOp->
92b0: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
92c0: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p2;.  assert( n>
92d0: 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e  0 && p1>0 && p2>
92e0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
92f0: 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c  1+n<=p2 || p2+n<
9300: 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d  =p1 );..  pIn1 =
9310: 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f   &aMem[p1];.  pO
9320: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  ut = &aMem[p2];.
9330: 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74    do{.    assert
9340: 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70  ( pOut<=&aMem[(p
9350: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
9360: 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
9370: 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28  t( pIn1<=&aMem[(
9380: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
9390: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
93a0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
93b0: 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41  In1) );.    memA
93c0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
93d0: 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  pOut);.    sqlit
93e0: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
93f0: 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65  ut, pIn1);.#ifde
9400: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9410: 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63     if( pOut->pSc
9420: 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70  opyFrom>=&aMem[p
9430: 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f  1] && pOut->pSco
9440: 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31 2b  pyFrom<&aMem[p1+
9450: 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20 20  pOp->p3] ){.    
9460: 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72    pOut->pScopyFr
9470: 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d 3e  om += p1 - pOp->
9480: 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p2;.    }.#endif
9490: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
94a0: 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b  ACE(p2++, pOut);
94b0: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20  .    pIn1++;.   
94c0: 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c   pOut++;.  }whil
94d0: 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61  e( --n );.  brea
94e0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
94f0: 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a   Copy P1 P2 P3 *
9500: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9510: 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40  r[P2@P3+1]=r[P1@
9520: 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  P3+1].**.** Make
9530: 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73   a copy of regis
9540: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69  ters P1..P1+P3 i
9550: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32  nto registers P2
9560: 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54  ..P2+P3..**.** T
9570: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
9580: 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70  makes a deep cop
9590: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
95a0: 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20   A duplicate.** 
95b0: 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73  is made of any s
95c0: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f  tring or blob co
95d0: 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73  nstant.  See als
95e0: 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63  o OP_SCopy..*/.c
95f0: 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20  ase OP_Copy: {. 
9600: 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70   int n;..  n = p
9610: 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d  Op->p3;.  pIn1 =
9620: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
9630: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
9640: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
9650: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
9660: 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a  ;.  while( 1 ){.
9670: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
9680: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
9690: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
96a0: 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65  hem);.    Deephe
96b0: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
96c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
96d0: 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53  BUG.    pOut->pS
96e0: 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65  copyFrom = 0;.#e
96f0: 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54 45  ndif.    REGISTE
9700: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
9710: 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29  pOp->p3-n, pOut)
9720: 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d  ;.    if( (n--)=
9730: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
9740: 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31  pOut++;.    pIn1
9750: 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
9760: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
9770: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
9780: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9790: 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]=r[P1].**.** 
97a0: 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63  Make a shallow c
97b0: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20  opy of register 
97c0: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
97d0: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
97e0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
97f0: 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  s a shallow copy
9800: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
9810: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
9820: 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  is a string or b
9830: 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  lob, then the co
9840: 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69  py is only a poi
9850: 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f  nter to the.** o
9860: 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63  riginal and henc
9870: 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e if the origina
9880: 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c  l changes so wil
9890: 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57  l the copy..** W
98a0: 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69  orse, if the ori
98b0: 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63  ginal is dealloc
98c0: 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62  ated, the copy b
98d0: 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a  ecomes invalid..
98e0: 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67  ** Thus the prog
98f0: 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74  ram must guarant
9900: 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67  ee that the orig
9910: 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68  inal will not ch
9920: 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74  ange.** during t
9930: 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74  he lifetime of t
9940: 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50  he copy.  Use OP
9950: 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20  _Copy to make a 
9960: 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79  complete.** copy
9970: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f  ..*/.case OP_SCo
9980: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
9990: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49   /* out2 */.  pI
99a0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
99b0: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
99c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
99d0: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
99e0: 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  n1 );.  sqlite3V
99f0: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
9a00: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
9a10: 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66  M_Ephem);.#ifdef
9a20: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
9a30: 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  if( pOut->pScopy
9a40: 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e  From==0 ) pOut->
9a50: 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e  pScopyFrom = pIn
9a60: 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61  1;.#endif.  brea
9a70: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9a80: 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32   ResultRow P1 P2
9a90: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
9aa0: 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50 31  is:  output=r[P1
9ab0: 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  @P2].**.** The r
9ac0: 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f  egisters P1 thro
9ad0: 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74  ugh P1+P2-1 cont
9ae0: 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ain a single row
9af0: 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20   of.** results. 
9b00: 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73  This opcode caus
9b10: 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  es the sqlite3_s
9b20: 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65  tep() call to te
9b30: 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20  rminate.** with 
9b40: 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65  an SQLITE_ROW re
9b50: 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74  turn code and it
9b60: 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c   sets up the sql
9b70: 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72  ite3_stmt.** str
9b80: 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64  ucture to provid
9b90: 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20  e access to the 
9ba0: 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31  r(P1)..r(P1+P2-1
9bb0: 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74  ) values as.** t
9bc0: 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a  he result row..*
9bd0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74  /.case OP_Result
9be0: 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  Row: {.  Mem *pM
9bf0: 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61  em;.  int i;.  a
9c00: 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f  ssert( p->nResCo
9c10: 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b  lumn==pOp->p2 );
9c20: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
9c30: 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p1>0 );.  assert
9c40: 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  ( pOp->p1+pOp->p
9c50: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  2<=(p->nMem-p->n
9c60: 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69  Cursor)+1 );..#i
9c70: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
9c80: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
9c90: 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65  ACK.  /* Run the
9ca0: 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65   progress counte
9cb0: 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65  r just before re
9cc0: 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20  turning..  */.  
9cd0: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
9ce0: 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74  s!=0.   && nVmSt
9cf0: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
9d00: 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72  it.   && db->xPr
9d10: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
9d20: 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b  ressArg)!=0.  ){
9d30: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
9d40: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
9d50: 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
9d60: 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  halt;.  }.#endif
9d70: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73  ..  /* If this s
9d80: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f  tatement has vio
9d90: 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20  lated immediate 
9da0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
9db0: 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a  traints, do.  **
9dc0: 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20   not return the 
9dd0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d  number of rows m
9de0: 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20  odified. And do 
9df0: 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20  not RELEASE the 
9e00: 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74  statement.  ** t
9e10: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e  ransaction. It n
9e20: 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
9e30: 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66  d back.  */.  if
9e40: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63  ( SQLITE_OK!=(rc
9e50: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
9e60: 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a  eckFk(p, 0)) ){.
9e70: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
9e80: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
9e90: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73  ntRows );.    as
9ea0: 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d  sert( p->usesStm
9eb0: 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20  tJournal );.    
9ec0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
9ed0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43   If the SQLITE_C
9ee0: 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73  ountRows flag is
9ef0: 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e   set in sqlite3.
9f00: 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
9f10: 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65   .  ** DML state
9f20: 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69  ments invoke thi
9f30: 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75  s opcode to retu
9f40: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
9f50: 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69   rows .  ** modi
9f60: 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  fied to the user
9f70: 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  . This is the on
9f80: 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d  ly way that a VM
9f90: 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73   that.  ** opens
9fa0: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
9fb0: 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76  nsaction may inv
9fc0: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  oke this opcode.
9fd0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61  .  **.  ** In ca
9fe0: 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20  se this is such 
9ff0: 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f  a statement, clo
a000: 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74  se any statement
a010: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a   transaction.  *
a020: 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73  * opened by this
a030: 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72   VM before retur
a040: 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  ning control to 
a050: 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69  the user. This i
a060: 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65  s to.  ** ensure
a070: 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d   that statement-
a080: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65  transactions are
a090: 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20   always nested, 
a0a0: 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e  not overlapping.
a0b0: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65  .  ** If the ope
a0c0: 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  n statement-tran
a0d0: 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63  saction is not c
a0e0: 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e  losed here, then
a0f0: 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d   the user.  ** m
a100: 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20  ay step another 
a110: 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74  VM that opens it
a120: 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20  s own statement 
a130: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69  transaction. Thi
a140: 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20  s.  ** may lead 
a150: 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73  to overlapping s
a160: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
a170: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
a180: 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   The statement t
a190: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65  ransaction is ne
a1a0: 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20  ver a top-level 
a1b0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65  transaction.  He
a1c0: 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c  nce.  ** the REL
a1d0: 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20  EASE call below 
a1e0: 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a  can never fail..
a1f0: 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
a200: 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
a210: 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  || db->flags&SQL
a220: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
a230: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
a240: 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e  dbeCloseStatemen
a250: 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52  t(p, SAVEPOINT_R
a260: 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20 4e  ELEASE);.  if( N
a270: 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
a280: 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  OK) ){.    break
a290: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61  ;.  }..  /* Inva
a2a0: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
a2b0: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
a2c0: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
a2d0: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
a2e0: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
a2f0: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
a300: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
a310: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
a320: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
a330: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
a340: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
a350: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
a360: 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69  re de-ephemerali
a370: 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69  zed as.  ** a si
a380: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
a390: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73    pMem = p->pRes
a3a0: 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70  ultSet = &aMem[p
a3b0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69  Op->p1];.  for(i
a3c0: 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69  =0; i<pOp->p2; i
a3d0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
a3e0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65   memIsValid(&pMe
a3f0: 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65  m[i]) );.    Dee
a400: 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65  phemeralize(&pMe
a410: 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  m[i]);.    asser
a420: 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  t( (pMem[i].flag
a430: 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d  s & MEM_Ephem)==
a440: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  0.            ||
a450: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
a460: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
a470: 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  lob))==0 );.    
a480: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
a490: 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d  lTerminate(&pMem
a4a0: 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  [i]);.    REGIST
a4b0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
a4c0: 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  +i, &pMem[i]);. 
a4d0: 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c   }.  if( db->mal
a4e0: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
a4f0: 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52   no_mem;..  /* R
a500: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57  eturn SQLITE_ROW
a510: 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20  .  */.  p->pc = 
a520: 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53  pc + 1;.  rc = S
a530: 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74  QLITE_ROW;.  got
a540: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
a550: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e  ../* Opcode: Con
a560: 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  cat P1 P2 P3 * *
a570: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
a580: 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a  P3]=r[P2]+r[P1].
a590: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65  **.** Add the te
a5a0: 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  xt in register P
a5b0: 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  1 onto the end o
a5c0: 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a  f the text in.**
a5d0: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
a5e0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
a5f0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
a600: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74  ..** If either t
a610: 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78 74  he P1 or P2 text
a620: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73   are NULL then s
a630: 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e  tore NULL in P3.
a640: 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32  .**.**   P3 = P2
a650: 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20   || P1.**.** It 
a660: 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50  is illegal for P
a670: 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74  1 and P3 to be t
a680: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
a690: 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20  . Sometimes,.** 
a6a0: 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61 6d  if P3 is the sam
a6b0: 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50 32  e register as P2
a6c0: 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
a6d0: 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20  tion is able.** 
a6e0: 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70  to avoid a memcp
a6f0: 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  y()..*/.case OP_
a700: 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20  Concat: {       
a710: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
a720: 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69  K_CONCAT, in1, i
a730: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
a740: 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31  4 nByte;..  pIn1
a750: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
a760: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
a770: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
a780: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a790: 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
a7a0: 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69  In1!=pOut );.  i
a7b0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
a7c0: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
a7d0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
a7e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
a7f0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
a800: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
a810: 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  f( ExpandBlob(pI
a820: 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f  n1) || ExpandBlo
a830: 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e  b(pIn2) ) goto n
a840: 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69  o_mem;.  Stringi
a850: 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  fy(pIn1, encodin
a860: 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  g);.  Stringify(
a870: 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn2, encoding);
a880: 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d  .  nByte = pIn1-
a890: 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  >n + pIn2->n;.  
a8a0: 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
a8b0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
a8c0: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
a8d0: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
a8e0: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
a8f0: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
a900: 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20  , (int)nByte+2, 
a910: 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20  pOut==pIn2) ){. 
a920: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
a930: 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65    }.  MemSetType
a940: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53  Flag(pOut, MEM_S
a950: 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 21  tr);.  if( pOut!
a960: 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d  =pIn2 ){.    mem
a970: 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e  cpy(pOut->z, pIn
a980: 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a  2->z, pIn2->n);.
a990: 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f    }.  memcpy(&pO
a9a0: 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20  ut->z[pIn2->n], 
a9b0: 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e  pIn1->z, pIn1->n
a9c0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  );.  pOut->z[nBy
a9d0: 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  te]=0;.  pOut->z
a9e0: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
a9f0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
aa00: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
aa10: 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
aa20: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
aa30: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
aa40: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
aa50: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
aa60: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
aa70: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
aa80: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
aa90: 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a  3]=r[P1]+r[P2].*
aaa0: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c  *.** Add the val
aab0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
aac0: 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
aad0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
aae0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
aaf0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
ab00: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
ab10: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
ab20: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
ab30: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
ab40: 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20  de: Multiply P1 
ab50: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
ab60: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
ab70: 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a  P1]*r[P2].**.**.
ab80: 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20  ** Multiply the 
ab90: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
aba0: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
abb0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
abc0: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
abd0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
abe0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
abf0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
ac00: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
ac10: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
ac20: 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20  pcode: Subtract 
ac30: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
ac40: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
ac50: 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]-r[P1].**.
ac60: 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20  ** Subtract the 
ac70: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
ac80: 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61  r P1 from the va
ac90: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
aca0: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
acb0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
acc0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
acd0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
ace0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
acf0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
ad00: 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20   Opcode: Divide 
ad10: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
ad20: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
ad30: 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]/r[P1].**.
ad40: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
ad50: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ad60: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
ad70: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
ad80: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
ad90: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
ada0: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
adb0: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
adc0: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
add0: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
ade0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
adf0: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
ae00: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
ae10: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ae20: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
ae30: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
ae40: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
ae50: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
ae60: 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]%r[P1].**.** 
ae70: 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61  Compute the rema
ae80: 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65  inder after inte
ae90: 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32 20  ger register P2 
aea0: 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a  is divided by .*
aeb0: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  * register P1 an
aec0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
aed0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
aee0: 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  3. .** If the va
aef0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
af00: 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72  P1 is zero the r
af10: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
af20: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
af30: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
af40: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
af50: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a  .*/.case OP_Add:
af60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af70: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
af80: 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  _PLUS, in1, in2,
af90: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
afa0: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20  _Subtract:      
afb0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
afc0: 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31  as TK_MINUS, in1
afd0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
afe0: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
aff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b000: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52   same as TK_STAR
b010: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b020: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69   */.case OP_Divi
b030: 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  de:             
b040: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b050: 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32  _SLASH, in1, in2
b060: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b070: 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20  P_Remainder: {  
b080: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b090: 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c   as TK_REM, in1,
b0a0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
b0b0: 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20  char bIntint;   
b0c0: 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20 61  /* Started out a
b0d0: 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70  s two integer op
b0e0: 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36 20  erands */.  u16 
b0f0: 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43  flags;      /* C
b100: 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c  ombined MEM_* fl
b110: 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e  ags from both in
b120: 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74 79  puts */.  u16 ty
b130: 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  pe1;      /* Num
b140: 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65 66  eric type of lef
b150: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75  t operand */.  u
b160: 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20 2f  16 type2;      /
b170: 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f  * Numeric type o
b180: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
b190: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20  */.  i64 iA;    
b1a0: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
b1b0: 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70  value of left op
b1c0: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69  erand */.  i64 i
b1d0: 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  B;         /* In
b1e0: 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72  teger value of r
b1f0: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
b200: 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20    double rA;    
b210: 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20    /* Real value 
b220: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
b230: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20  */.  double rB; 
b240: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
b250: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
b260: 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  and */..  pIn1 =
b270: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
b280: 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65 72  .  type1 = numer
b290: 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20 20  icType(pIn1);.  
b2a0: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
b2b0: 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20 3d  ->p2];.  type2 =
b2c0: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e   numericType(pIn
b2d0: 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2);.  pOut = &aM
b2e0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
b2f0: 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61  lags = pIn1->fla
b300: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
b310: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20 26  ;.  if( (flags &
b320: 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20   MEM_Null)!=0 ) 
b330: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
b340: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
b350: 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20 74    if( (type1 & t
b360: 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29 21  ype2 & MEM_Int)!
b370: 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70  =0 ){.    iA = p
b380: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42  In1->u.i;.    iB
b390: 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
b3a0: 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20    bIntint = 1;. 
b3b0: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
b3c0: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  opcode ){.      
b3d0: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
b3e0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 64     if( sqlite3Ad
b3f0: 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  dInt64(&iB,iA) )
b400: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
b410: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
b420: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
b430: 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49 6e  if( sqlite3SubIn
b440: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
b450: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
b460: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
b470: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66 28  P_Multiply:  if(
b480: 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
b490: 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20  (&iB,iA) ) goto 
b4a0: 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b  fp_math;  break;
b4b0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
b4c0: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
b4d0: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
b4e0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
b4f0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
b500: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
b510: 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f  && iB==SMALLEST_
b520: 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70 5f  INT64 ) goto fp_
b530: 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69 42  math;.        iB
b540: 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20   /= iA;.        
b550: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
b560: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
b570: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b580: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
b590: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
b5a0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
b5b0: 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b  iA==-1 ) iA = 1;
b5c0: 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20 69  .        iB %= i
b5d0: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
b5e0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
b5f0: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
b600: 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  iB;.    MemSetTy
b610: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
b620: 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  _Int);.  }else{.
b630: 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b      bIntint = 0;
b640: 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41  .fp_math:.    rA
b650: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
b660: 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  alValue(pIn1);. 
b670: 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56     rB = sqlite3V
b680: 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
b690: 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20  2);.    switch( 
b6a0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
b6b0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64       case OP_Add
b6c0: 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20  :         rB += 
b6d0: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
b6e0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53  .      case OP_S
b6f0: 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d  ubtract:    rB -
b700: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
b710: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
b720: 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42  _Multiply:    rB
b730: 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   *= rA;       br
b740: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
b750: 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20  OP_Divide: {.   
b760: 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29       /* (double)
b770: 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c  0 In case of SQL
b780: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
b790: 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20  G_POINT... */.  
b7a0: 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64        if( rA==(d
b7b0: 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61  ouble)0 ) goto a
b7c0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
b7d0: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
b7e0: 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20    rB /= rA;.    
b7f0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
b800: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
b810: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d  : {.        iA =
b820: 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20   (i64)rA;.      
b830: 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a    iB = (i64)rB;.
b840: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b850: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
b860: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
b870: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
b880: 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b  iA==-1 ) iA = 1;
b890: 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28 64  .        rB = (d
b8a0: 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b  ouble)(iB % iA);
b8b0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
b8c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69        }.    }.#i
b8d0: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
b8e0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
b8f0: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
b900: 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  rB;.    MemSetTy
b910: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
b920: 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20  _Int);.#else.   
b930: 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61   if( sqlite3IsNa
b940: 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67  N(rB) ){.      g
b950: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
b960: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
b970: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75     }.    pOut->u
b980: 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d  .r = rB;.    Mem
b990: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
b9a0: 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20  , MEM_Real);.   
b9b0: 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79 70   if( ((type1|typ
b9c0: 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  e2)&MEM_Real)==0
b9d0: 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a   && !bIntint ){.
b9e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b9f0: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
ba00: 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65  (pOut);.    }.#e
ba10: 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
ba20: 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65  ;..arithmetic_re
ba30: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20  sult_is_null:.  
ba40: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
ba50: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62  tNull(pOut);.  b
ba60: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ba70: 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a  de: CollSeq P1 *
ba80: 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69   * P4.**.** P4 i
ba90: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
baa0: 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e   CollSeq struct.
bab0: 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c   If the next cal
bac0: 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63  l to a user func
bad0: 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65  tion.** or aggre
bae0: 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74  gate calls sqlit
baf0: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
bb00: 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69  (), this collati
bb10: 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c  on sequence will
bb20: 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e  .** be returned.
bb30: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
bb40: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69   the built-in mi
bb50: 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e  n(), max() and n
bb60: 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74  ullif().** funct
bb70: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ions..**.** If P
bb80: 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  1 is not zero, t
bb90: 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67 69  hen it is a regi
bba0: 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62 73  ster that a subs
bbb0: 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a  equent min() or.
bbc0: 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67 61  ** max() aggrega
bbd0: 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31  te will set to 1
bbe0: 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   if the current 
bbf0: 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d  row is not the m
bc00: 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78  inimum or.** max
bc10: 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65  imum.  The P1 re
bc20: 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69 61  gister is initia
bc30: 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68  lized to 0 by th
bc40: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
bc50: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  **.** The interf
bc60: 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20  ace used by the 
bc70: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
bc80: 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69  f the aforementi
bc90: 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  oned functions.*
bca0: 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68  * to retrieve th
bcb0: 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
bcc0: 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73  ence set by this
bcd0: 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61   opcode is not a
bce0: 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c  vailable.** publ
bcf0: 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73  icly, only to us
bd00: 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66  er functions def
bd10: 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a  ined in func.c..
bd20: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53  */.case OP_CollS
bd30: 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  eq: {.  assert( 
bd40: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
bd50: 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28  COLLSEQ );.  if(
bd60: 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
bd70: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
bd80: 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70  tInt64(&aMem[pOp
bd90: 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20  ->p1], 0);.  }. 
bda0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
bdb0: 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50  code: Function P
bdc0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
bdd0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
bde0: 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a  =func(r[P2@P5]).
bdf0: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
be00: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
be10: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
be20: 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75   a Function stru
be30: 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65  cture that.** de
be40: 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69  fines the functi
be50: 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75  on) with P5 argu
be60: 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d  ments taken from
be70: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
be80: 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20  .** successors. 
be90: 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   The result of t
bea0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73  he function is s
beb0: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
bec0: 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65  r P3..** Registe
bed0: 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65  r P3 must not be
bee0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63   one of the func
bef0: 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a  tion inputs..**.
bf00: 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69  ** P1 is a 32-bi
bf10: 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61  t bitmask indica
bf20: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
bf30: 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e  not each argumen
bf40: 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e  t to the .** fun
bf50: 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d  ction was determ
bf60: 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74  ined to be const
bf70: 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74  ant at compile t
bf80: 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73  ime. If the firs
bf90: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61  t.** argument wa
bfa0: 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20  s constant then 
bfb0: 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73  bit 0 of P1 is s
bfc0: 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
bfd0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a   to determine.**
bfe0: 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61   whether meta da
bff0: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
c000: 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  th a user functi
c010: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e  on argument usin
c020: 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  g the.** sqlite3
c030: 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41  _set_auxdata() A
c040: 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79  PI may be safely
c050: 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20   retained until 
c060: 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f  the next.** invo
c070: 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f  cation of this o
c080: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
c090: 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61   also: AggStep a
c0a0: 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63  nd AggFinal.*/.c
c0b0: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a  ase OP_Function:
c0c0: 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65   {.  int i;.  Me
c0d0: 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74  m *pArg;.  sqlit
c0e0: 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a  e3_context ctx;.
c0f0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
c100: 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e  **apVal;.  int n
c110: 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35  ;..  n = pOp->p5
c120: 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61  ;.  apVal = p->a
c130: 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20  pArg;.  assert( 
c140: 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b  apVal || n==0 );
c150: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
c160: 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
c170: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
c180: 72 73 6f 72 29 20 29 3b 0a 20 20 63 74 78 2e 70  rsor) );.  ctx.p
c190: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
c1a0: 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
c1b0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 63 74 78 2e  ToChange(p, ctx.
c1c0: 70 4f 75 74 29 3b 0a 0a 20 20 61 73 73 65 72 74  pOut);..  assert
c1d0: 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e  ( n==0 || (pOp->
c1e0: 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
c1f0: 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  n<=(p->nMem-p->n
c200: 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20  Cursor)+1) );.  
c210: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
c220: 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e  pOp->p2 || pOp->
c230: 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b  p3>=pOp->p2+n );
c240: 0a 20 20 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b  .  pArg = &aMem[
c250: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28  pOp->p2];.  for(
c260: 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70  i=0; i<n; i++, p
c270: 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  Arg++){.    asse
c280: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
c290: 41 72 67 29 20 29 3b 0a 20 20 20 20 61 70 56 61  Arg) );.    apVa
c2a0: 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20  l[i] = pArg;.   
c2b0: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
c2c0: 70 41 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53  pArg);.    REGIS
c2d0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
c2e0: 32 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a  2+i, pArg);.  }.
c2f0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
c300: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44  p4type==P4_FUNCD
c310: 45 46 20 29 3b 0a 20 20 63 74 78 2e 70 46 75 6e  EF );.  ctx.pFun
c320: 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
c330: 63 3b 0a 20 20 63 74 78 2e 69 4f 70 20 3d 20 70  c;.  ctx.iOp = p
c340: 63 3b 0a 20 20 63 74 78 2e 70 56 64 62 65 20 3d  c;.  ctx.pVdbe =
c350: 20 70 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65   p;.  MemSetType
c360: 46 6c 61 67 28 63 74 78 2e 70 4f 75 74 2c 20 4d  Flag(ctx.pOut, M
c370: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 63 74 78 2e  EM_Null);.  ctx.
c380: 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b  fErrorOrAux = 0;
c390: 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  .  db->lastRowid
c3a0: 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
c3b0: 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75  (*ctx.pFunc->xFu
c3c0: 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56  nc)(&ctx, n, apV
c3d0: 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  al); /* IMP: R-2
c3e0: 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20  4505-23230 */.  
c3f0: 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e  lastRowid = db->
c400: 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 52  lastRowid;  /* R
c410: 65 6d 65 6d 62 65 72 20 72 6f 77 69 64 20 63 68  emember rowid ch
c420: 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 78 46  anges made by xF
c430: 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20  unc */..  /* If 
c440: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  the function ret
c450: 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20  urned an error, 
c460: 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69  throw an excepti
c470: 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e  on */.  if( ctx.
c480: 66 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20  fErrorOrAux ){. 
c490: 20 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72     if( ctx.isErr
c4a0: 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  or ){.      sqli
c4b0: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
c4c0: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
c4d0: 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
c4e0: 65 5f 74 65 78 74 28 63 74 78 2e 70 4f 75 74 29  e_text(ctx.pOut)
c4f0: 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 63 74  );.      rc = ct
c500: 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d  x.isError;.    }
c510: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c520: 44 65 6c 65 74 65 41 75 78 44 61 74 61 28 70 2c  DeleteAuxData(p,
c530: 20 70 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20   pc, pOp->p1);. 
c540: 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68   }..  /* Copy th
c550: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
c560: 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65  function into re
c570: 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 73  gister P3 */.  s
c580: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
c590: 45 6e 63 6f 64 69 6e 67 28 63 74 78 2e 70 4f 75  Encoding(ctx.pOu
c5a0: 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  t, encoding);.  
c5b0: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
c5c0: 65 6d 54 6f 6f 42 69 67 28 63 74 78 2e 70 4f 75  emTooBig(ctx.pOu
c5d0: 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  t) ){.    goto t
c5e0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 52  oo_big;.  }..  R
c5f0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
c600: 70 2d 3e 70 33 2c 20 63 74 78 2e 70 4f 75 74 29  p->p3, ctx.pOut)
c610: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
c620: 4c 4f 42 53 49 5a 45 28 63 74 78 2e 70 4f 75 74  LOBSIZE(ctx.pOut
c630: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
c640: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64  * Opcode: BitAnd
c650: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
c660: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
c670: 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]&r[P2].**
c680: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
c690: 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65  -wise AND of the
c6a0: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
c6b0: 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
c6c0: 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72  d.** store the r
c6d0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
c6e0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
c6f0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
c700: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
c710: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
c720: 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20  de: BitOr P1 P2 
c730: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
c740: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  is:  r[P3]=r[P1]
c750: 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b  |r[P2].**.** Tak
c760: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f  e the bit-wise O
c770: 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
c780: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
c790: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
c7a0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
c7b0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
c7c0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
c7d0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
c7e0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
c7f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
c800: 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a  tLeft P1 P2 P3 *
c810: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
c820: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b   r[P3]=r[P2]<<r[
c830: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  P1].**.** Shift 
c840: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
c850: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
c860: 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20   to the left by 
c870: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
c880: 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20   bits specified 
c890: 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69  by the integer i
c8a0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
c8b0: 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75  * Store the resu
c8c0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
c8d0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
c8e0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
c8f0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
c900: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
c910: 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50   ShiftRight P1 P
c920: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
c930: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
c940: 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  2]>>r[P1].**.** 
c950: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
c960: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
c970: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69  ter P2 to the ri
c980: 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  ght by the.** nu
c990: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
c9a0: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
c9b0: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
c9c0: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
c9d0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
c9e0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
c9f0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
ca00: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
ca10: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
ca20: 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20  e OP_BitAnd:    
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ca40: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e  same as TK_BITAN
ca50: 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
ca60: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  3 */.case OP_Bit
ca70: 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Or:             
ca80: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ca90: 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69  TK_BITOR, in1, i
caa0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
cab0: 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20   OP_ShiftLeft:  
cac0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
cad0: 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54  ame as TK_LSHIFT
cae0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
caf0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
cb00: 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20  tRight: {       
cb10: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cb20: 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_RSHIFT, in1, i
cb30: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
cb40: 34 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a  4 iA;.  u64 uA;.
cb50: 20 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f    i64 iB;.  u8 o
cb60: 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  p;..  pIn1 = &aM
cb70: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
cb80: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
cb90: 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p2];.  pOut = &
cba0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
cbb0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
cbc0: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
cbd0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
cbe0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
cbf0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
cc00: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
cc10: 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iA = sqlite3Vdb
cc20: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b  eIntValue(pIn2);
cc30: 0a 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56  .  iB = sqlite3V
cc40: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
cc50: 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f  );.  op = pOp->o
cc60: 70 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d  pcode;.  if( op=
cc70: 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20  =OP_BitAnd ){.  
cc80: 20 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65    iA &= iB;.  }e
cc90: 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  lse if( op==OP_B
cca0: 69 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c  itOr ){.    iA |
ccb0: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
ccc0: 28 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61  ( iB!=0 ){.    a
ccd0: 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68  ssert( op==OP_Sh
cce0: 69 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d  iftRight || op==
ccf0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a  OP_ShiftLeft );.
cd00: 0a 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74  .    /* If shift
cd10: 69 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69 76  ing by a negativ
cd20: 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20  e amount, shift 
cd30: 69 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69 72  in the other dir
cd40: 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66  ection */.    if
cd50: 28 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20  ( iB<0 ){.      
cd60: 61 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74  assert( OP_Shift
cd70: 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c  Right==OP_ShiftL
cd80: 65 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f  eft+1 );.      o
cd90: 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65  p = 2*OP_ShiftLe
cda0: 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20  ft + 1 - op;.   
cdb0: 20 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29     iB = iB>(-64)
cdc0: 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20   ? -iB : 64;.   
cdd0: 20 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d   }..    if( iB>=
cde0: 36 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d  64 ){.      iA =
cdf0: 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f   (iA>=0 || op==O
ce00: 50 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30  P_ShiftLeft) ? 0
ce10: 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65   : -1;.    }else
ce20: 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26  {.      memcpy(&
ce30: 75 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28  uA, &iA, sizeof(
ce40: 75 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  uA));.      if( 
ce50: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
ce60: 20 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c   ){.        uA <
ce70: 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c  <= iB;.      }el
ce80: 73 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e  se{.        uA >
ce90: 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f  >= iB;.        /
cea0: 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e  * Sign-extend on
ceb0: 20 61 20 72 69 67 68 74 20 73 68 69 66 74 20 6f   a right shift o
cec0: 66 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d  f a negative num
ced0: 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ber */.        i
cee0: 66 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20  f( iA<0 ) uA |= 
cef0: 28 28 28 28 75 36 34 29 30 78 66 66 66 66 66 66  ((((u64)0xffffff
cf00: 66 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66  ff)<<32)|0xfffff
cf10: 66 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b  fff) << (64-iB);
cf20: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d  .      }.      m
cf30: 65 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20  emcpy(&iA, &uA, 
cf40: 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20  sizeof(iA));.   
cf50: 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75   }.  }.  pOut->u
cf60: 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65  .i = iA;.  MemSe
cf70: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
cf80: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
cf90: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
cfa0: 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a   AddImm  P1 P2 *
cfb0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
cfc0: 3a 20 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50  :  r[P1]=r[P1]+P
cfd0: 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65  2.** .** Add the
cfe0: 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20   constant P2 to 
cff0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
d000: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ister P1..** The
d010: 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79   result is alway
d020: 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a  s an integer..**
d030: 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79  .** To force any
d040: 20 72 65 67 69 73 74 65 72 20 74 6f 20 62 65 20   register to be 
d050: 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74  an integer, just
d060: 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20   add 0..*/.case 
d070: 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20  OP_AddImm: {    
d080: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
d090: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
d0a0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
d0b0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
d0c0: 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65   pIn1);.  sqlite
d0d0: 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
d0e0: 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31  fy(pIn1);.  pIn1
d0f0: 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32  ->u.i += pOp->p2
d100: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
d110: 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49   Opcode: MustBeI
d120: 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
d130: 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  * .** Force the 
d140: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d150: 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e  r P1 to be an in
d160: 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 76  teger.  If the v
d170: 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
d180: 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20   not an integer 
d190: 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  and cannot be co
d1a0: 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
d1b0: 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f  integer.** witho
d1c0: 75 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68  ut data loss, th
d1d0: 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
d1e0: 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66  ely to P2, or if
d1f0: 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20   P2==0.** raise 
d200: 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54  an SQLITE_MISMAT
d210: 43 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f  CH exception..*/
d220: 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49  .case OP_MustBeI
d230: 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
d240: 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
d250: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d260: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
d270: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
d280: 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
d290: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
d2a0: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
d2b0: 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69  _NUMERIC, encodi
d2c0: 6e 67 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  ng);.    VdbeBra
d2d0: 6e 63 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e  nchTaken((pIn1->
d2e0: 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d  flags&MEM_Int)==
d2f0: 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 28  0, 2);.    if( (
d300: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d310: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
d320: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
d330: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
d340: 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  = SQLITE_MISMATC
d350: 48 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  H;.        goto 
d360: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
d370: 6f 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  or;.      }else{
d380: 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f  .        pc = pO
d390: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
d3a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
d3b0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65  }.    }.  }.  Me
d3c0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e  mSetTypeFlag(pIn
d3d0: 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62  1, MEM_Int);.  b
d3e0: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
d3f0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
d400: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f  ATING_POINT./* O
d410: 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e  pcode: RealAffin
d420: 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ity P1 * * * *.*
d430: 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72  *.** If register
d440: 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74   P1 holds an int
d450: 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20  eger convert it 
d460: 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e  to a real value.
d470: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
d480: 64 65 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  de is used when 
d490: 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72  extracting infor
d4a0: 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f  mation from a co
d4b0: 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73  lumn that.** has
d4c0: 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20   REAL affinity. 
d4d0: 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c   Such column val
d4e0: 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65  ues may still be
d4f0: 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e   stored as.** in
d500: 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63  tegers, for spac
d510: 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75  e efficiency, bu
d520: 74 20 61 66 74 65 72 20 65 78 74 72 61 63 74 69  t after extracti
d530: 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a  on we want them.
d540: 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20  ** to have only 
d550: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f  a real value..*/
d560: 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66  .case OP_RealAff
d570: 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20  inity: {        
d580: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
d590: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
d5a0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
d5b0: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
d5c0: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
d5d0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
d5e0: 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  alify(pIn1);.  }
d5f0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
d600: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
d610: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20  TE_OMIT_CAST./* 
d620: 4f 70 63 6f 64 65 3a 20 43 61 73 74 20 50 31 20  Opcode: Cast P1 
d630: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
d640: 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72  psis: affinity(r
d650: 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  [P1]).**.** Forc
d660: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
d670: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
d680: 20 74 68 65 20 74 79 70 65 20 64 65 66 69 6e 65   the type define
d690: 64 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20  d by P2..** .** 
d6a0: 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75  <ul>.** <li valu
d6b0: 65 3d 22 39 37 22 3e 20 54 45 58 54 0a 2a 2a 20  e="97"> TEXT.** 
d6c0: 3c 6c 69 20 76 61 6c 75 65 3d 22 39 38 22 3e 20  <li value="98"> 
d6d0: 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75  BLOB.** <li valu
d6e0: 65 3d 22 39 39 22 3e 20 4e 55 4d 45 52 49 43 0a  e="99"> NUMERIC.
d6f0: 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30  ** <li value="10
d700: 30 22 3e 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c  0"> INTEGER.** <
d710: 6c 69 20 76 61 6c 75 65 3d 22 31 30 31 22 3e 20  li value="101"> 
d720: 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a  REAL.** </ul>.**
d730: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
d740: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
d750: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
d760: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
d770: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61  L..*/.case OP_Ca
d780: 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  st: {           
d790: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
d7a0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
d7b0: 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  p2>=SQLITE_AFF_N
d7c0: 4f 4e 45 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d  ONE && pOp->p2<=
d7d0: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20  SQLITE_AFF_REAL 
d7e0: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
d7f0: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
d800: 46 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65 73  FF_TEXT );.  tes
d810: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
d820: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20  SQLITE_AFF_NONE 
d830: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
d840: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
d850: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
d860: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
d870: 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  2==SQLITE_AFF_IN
d880: 54 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74 63  TEGER );.  testc
d890: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
d8a0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b  LITE_AFF_REAL );
d8b0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d8c0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
d8d0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d8e0: 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45 78  pIn1);.  rc = Ex
d8f0: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a  pandBlob(pIn1);.
d900: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
d910: 43 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e  Cast(pIn1, pOp->
d920: 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  p2, encoding);. 
d930: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
d940: 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72  SIZE(pIn1);.  br
d950: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
d960: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
d970: 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
d980: 20 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20   Lt P1 P2 P3 P4 
d990: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
d9a0: 69 66 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67  if r[P1]<r[P3] g
d9b0: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d  oto P2.**.** Com
d9c0: 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20  pare the values 
d9d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
d9e0: 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50  nd P3.  If reg(P
d9f0: 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a  3)<reg(P1) then.
da00: 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  ** jump to addre
da10: 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49  ss P2.  .**.** I
da20: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
da30: 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50  PIFNULL bit of P
da40: 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69 74  5 is set and eit
da50: 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a  her reg(P1) or.*
da60: 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c  * reg(P3) is NUL
da70: 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
da80: 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51  jump.  If the SQ
da90: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
daa0: 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72  .** bit is clear
dab0: 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
dac0: 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  gh if either ope
dad0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  rand is NULL..**
dae0: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
daf0: 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20  FF_MASK portion 
db00: 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e  of P5 must be an
db10: 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63   affinity charac
db20: 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f  ter -.** SQLITE_
db30: 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45  AFF_TEXT, SQLITE
db40: 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e  _AFF_INTEGER, an
db50: 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61  d so forth. An a
db60: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a  ttempt is made .
db70: 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74  ** to coerce bot
db80: 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69  h inputs accordi
db90: 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e  ng to this affin
dba0: 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a  ity before the.*
dbb0: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  * comparison is 
dbc0: 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c  made. If the SQL
dbd0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20  ITE_AFF_MASK is 
dbe0: 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72  0x00, then numer
dbf0: 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69  ic.** affinity i
dc00: 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61  s used. Note tha
dc10: 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63  t the affinity c
dc20: 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73  onversions are s
dc30: 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e  tored.** back in
dc40: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
dc50: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
dc60: 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64  .  So this opcod
dc70: 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70  e can cause.** p
dc80: 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65  ersistent change
dc90: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  s to registers P
dca0: 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  1 and P3..**.** 
dcb0: 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73  Once any convers
dcc0: 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20  ions have taken 
dcd0: 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68  place, and neith
dce0: 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  er value is NULL
dcf0: 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  , .** the values
dd00: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49   are compared. I
dd10: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
dd20: 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d  e blobs then mem
dd30: 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64  cmp() is.** used
dd40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
dd50: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
dd60: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
dd70: 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20   both values.** 
dd80: 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74  are text, then t
dd90: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63  he appropriate c
dda0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
ddb0: 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a  n specified in.*
ddc0: 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f  * P4 is  used to
ddd0: 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   do the comparis
dde0: 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f  on.  If P4 is no
ddf0: 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  t specified then
de00: 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20  .** memcmp() is 
de10: 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
de20: 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66  text string.  If
de30: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
de40: 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65  .** numeric, the
de50: 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70  n a numeric comp
de60: 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20  arison is used. 
de70: 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65  If the two value
de80: 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66  s.** are of diff
de90: 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65  erent types, the
dea0: 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f  n numbers are co
deb0: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
dec0: 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e  an.** strings an
ded0: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f  d strings are co
dee0: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
def0: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20  an blobs..**.** 
df00: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54  If the SQLITE_ST
df10: 4f 52 45 50 32 20 62 69 74 20 6f 66 20 50 35 20  OREP2 bit of P5 
df20: 69 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20  is set, then do 
df30: 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65  not jump.  Inste
df40: 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62  ad,.** store a b
df50: 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65  oolean result (e
df60: 69 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f  ither 0, or 1, o
df70: 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73  r NULL) in regis
df80: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
df90: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
dfa0: 45 51 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  EQ bit is set in
dfb0: 20 50 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76   P5, then NULL v
dfc0: 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64  alues are consid
dfd0: 65 72 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f  ered.** equal to
dfe0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70 72   one another, pr
dff0: 6f 76 69 64 65 64 20 74 68 61 74 20 74 68 65 79  ovided that they
e000: 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 68 65   do not have the
e010: 69 72 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a  ir MEM_Cleared.*
e020: 2a 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a  * bit set..*/./*
e030: 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50   Opcode: Ne P1 P
e040: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
e050: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
e060: 21 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  !=r[P3] goto P2.
e070: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
e080: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
e090: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
e0a0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
e0b0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
e0c0: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
e0d0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
e0e0: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20   are not equal. 
e0f0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
e100: 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69  de for.** additi
e110: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
e120: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ..**.** If SQLIT
e130: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
e140: 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72  in P5 then the r
e150: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
e160: 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69  son is always ei
e170: 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20  ther.** true or 
e180: 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76  false and is nev
e190: 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74  er NULL.  If bot
e1a0: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
e1b0: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
e1c0: 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72  ult.** of compar
e1d0: 69 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20  ison is false.  
e1e0: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
e1f0: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  d is NULL then t
e200: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 72 75  he result is tru
e210: 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72  e..** If neither
e220: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
e230: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
e240: 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f  he same as it wo
e250: 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65  uld be if.** the
e260: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66   SQLITE_NULLEQ f
e270: 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64  lag were omitted
e280: 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20   from P5..*/./* 
e290: 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32  Opcode: Eq P1 P2
e2a0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
e2b0: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d  opsis: if r[P1]=
e2c0: 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  =r[P3] goto P2.*
e2d0: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
e2e0: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
e2f0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
e300: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
e310: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
e320: 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69  operands in regi
e330: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20  sters P1 and P3 
e340: 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65  are equal..** Se
e350: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e360: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
e370: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
e380: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
e390: 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  EQ is set in P5 
e3a0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e3b0: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
e3c0: 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a   always either.*
e3d0: 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20  * true or false 
e3e0: 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c  and is never NUL
e3f0: 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72  L.  If both oper
e400: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68  ands are NULL th
e410: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  en the result.**
e420: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
e430: 73 20 74 72 75 65 2e 20 20 49 66 20 65 69 74 68  s true.  If eith
e440: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
e450: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e460: 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20  lt is false..** 
e470: 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61  If neither opera
e480: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72  nd is NULL the r
e490: 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d  esult is the sam
e4a0: 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  e as it would be
e4b0: 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54   if.** the SQLIT
e4c0: 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65  E_NULLEQ flag we
e4d0: 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
e4e0: 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  P5..*/./* Opcode
e4f0: 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34  : Le P1 P2 P3 P4
e500: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
e510: 20 69 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d   if r[P1]<=r[P3]
e520: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
e530: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e540: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
e550: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e560: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e570: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
e580: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
e590: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
e5a0: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
e5b0: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
e5c0: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
e5d0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
e5e0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
e5f0: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
e600: 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20 50  code: Gt P1 P2 P
e610: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
e620: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b  sis: if r[P1]>r[
e630: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
e640: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
e650: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
e660: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
e670: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
e680: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
e690: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
e6a0: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
e6b0: 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  han the content 
e6c0: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
e6d0: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
e6e0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
e6f0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
e700: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
e710: 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ge P1 P2 P3 P4 P
e720: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
e730: 66 20 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67  f r[P1]>=r[P3] g
e740: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
e750: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
e760: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e770: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
e780: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
e790: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
e7a0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
e7b0: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
e7c0: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
e7d0: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
e7e0: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
e7f0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e800: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e810: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
e820: 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20   OP_Eq:         
e830: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
e840: 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e   TK_EQ, jump, in
e850: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
e860: 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Ne:           
e870: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e880: 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_NE, jump, in1,
e890: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
e8a0: 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Lt:             
e8b0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
e8c0: 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  LT, jump, in1, i
e8d0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65  n3 */.case OP_Le
e8e0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
e8f0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45  /* same as TK_LE
e900: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
e910: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20   */.case OP_Gt: 
e920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e930: 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20   same as TK_GT, 
e940: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
e950: 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20  /.case OP_Ge: { 
e960: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e970: 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75  ame as TK_GE, ju
e980: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
e990: 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
e9a0: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
e9b0: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
e9c0: 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73  n of pIn1 agains
e9d0: 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72  t pIn3 */.  char
e9e0: 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
e9f0: 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75  /* Affinity to u
ea00: 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f  se for compariso
ea10: 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  n */.  u16 flags
ea20: 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  1;         /* Co
ea30: 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
ea40: 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61  lue of pIn1->fla
ea50: 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  gs */.  u16 flag
ea60: 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s3;         /* C
ea70: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
ea80: 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c  alue of pIn3->fl
ea90: 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ags */..  pIn1 =
eaa0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
eab0: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
eac0: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67  pOp->p3];.  flag
ead0: 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  s1 = pIn1->flags
eae0: 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e  ;.  flags3 = pIn
eaf0: 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  3->flags;.  if( 
eb00: 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33  (flags1 | flags3
eb10: 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  )&MEM_Null ){.  
eb20: 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68    /* One or both
eb30: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
eb40: 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f  LL */.    if( pO
eb50: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
eb60: 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f  ULLEQ ){.      /
eb70: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
eb80: 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68  EQ is set (which
eb90: 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65   will only happe
eba0: 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f  n if the operato
ebb0: 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50  r is.      ** OP
ebc0: 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68  _Eq or OP_Ne) th
ebd0: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
ebe0: 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
ebf0: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20  g on whether.   
ec00: 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74     ** or not bot
ec10: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  h operands are n
ec20: 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ull..      */.  
ec30: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
ec40: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c  >opcode==OP_Eq |
ec50: 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
ec60: 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73  P_Ne );.      as
ec70: 73 65 72 74 28 20 28 66 6c 61 67 73 31 20 26 20  sert( (flags1 & 
ec80: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20  MEM_Cleared)==0 
ec90: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
eca0: 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
ecb0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d  TE_JUMPIFNULL)==
ecc0: 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28  0 );.      if( (
ecd0: 66 6c 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29  flags1&MEM_Null)
ece0: 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66  !=0.       && (f
ecf0: 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21  lags3&MEM_Null)!
ed00: 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c  =0.       && (fl
ed10: 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64  ags3&MEM_Cleared
ed20: 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20  )==0.      ){.  
ed30: 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20        res = 0;  
ed40: 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20 65  /* Results are e
ed50: 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65  qual */.      }e
ed60: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73  lse{.        res
ed70: 20 3d 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74   = 1;  /* Result
ed80: 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20  s are not equal 
ed90: 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  */.      }.    }
eda0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53  else{.      /* S
edb0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
edc0: 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61  clear and at lea
edd0: 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69  st one operand i
ede0: 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a  s NULL,.      **
edf0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
ee00: 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e   is always NULL.
ee10: 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75  .      ** The ju
ee20: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
ee30: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
ee40: 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e  NULL bit is set.
ee50: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
ee60: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
ee70: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
ee80: 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26          pOut = &
ee90: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
eea0: 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70         MemSetTyp
eeb0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
eec0: 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52  Null);.        R
eed0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
eee0: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
eef0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
ef00: 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
ef10: 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20 20  en(2,3);.       
ef20: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
ef30: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
ef40: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 63   ){.          pc
ef50: 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
ef60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
ef70: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
ef80: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
ef90: 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61  /* Neither opera
efa0: 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20  nd is NULL.  Do 
efb0: 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f  a comparison. */
efc0: 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20  .    affinity = 
efd0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
efe0: 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69  _AFF_MASK;.    i
eff0: 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c  f( affinity>=SQL
f000: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
f010: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49  ){.      if( (pI
f020: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  n1->flags & (MEM
f030: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
f040: 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
f050: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 6c   ){.        appl
f060: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
f070: 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20  (pIn1,0);.      
f080: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  }.      if( (pIn
f090: 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  3->flags & (MEM_
f0a0: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
f0b0: 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  _Str))==MEM_Str 
f0c0: 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 6c 79  ){.        apply
f0d0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
f0e0: 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20 7d  pIn3,0);.      }
f0f0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61  .    }else if( a
f100: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
f110: 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  AFF_TEXT ){.    
f120: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
f130: 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30  gs & MEM_Str)==0
f140: 20 26 26 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73   && (pIn1->flags
f150: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
f160: 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20  Real))!=0 ){.   
f170: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
f180: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
f190: 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20  _Int );.        
f1a0: 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e  testcase( pIn1->
f1b0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
f1c0: 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   );.        sqli
f1d0: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
f1e0: 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
f1f0: 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a  ng, 1);.      }.
f200: 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
f210: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
f220: 29 3d 3d 30 20 26 26 20 28 70 49 6e 33 2d 3e 66  )==0 && (pIn3->f
f230: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
f240: 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b  MEM_Real))!=0 ){
f250: 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
f260: 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
f270: 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
f280: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
f290: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
f2a0: 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  Real );.        
f2b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
f2c0: 72 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e  ringify(pIn3, en
f2d0: 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20  coding, 1);.    
f2e0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
f2f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
f300: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c  e==P4_COLLSEQ ||
f310: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d   pOp->p4.pColl==
f320: 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e  0 );.    if( pIn
f330: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  1->flags & MEM_Z
f340: 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ero ){.      sql
f350: 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
f360: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20  dBlob(pIn1);.   
f370: 20 20 20 66 6c 61 67 73 31 20 26 3d 20 7e 4d 45     flags1 &= ~ME
f380: 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20  M_Zero;.    }.  
f390: 20 20 69 66 28 20 70 49 6e 33 2d 3e 66 6c 61 67    if( pIn3->flag
f3a0: 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
f3b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f3c0: 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70  eMemExpandBlob(p
f3d0: 49 6e 33 29 3b 0a 20 20 20 20 20 20 66 6c 61 67  In3);.      flag
f3e0: 73 33 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b  s3 &= ~MEM_Zero;
f3f0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64  .    }.    if( d
f400: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
f410: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
f420: 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
f430: 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c  MemCompare(pIn3,
f440: 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70   pIn1, pOp->p4.p
f450: 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69  Coll);.  }.  swi
f460: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
f470: 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f   ){.    case OP_
f480: 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Eq:    res = res
f490: 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  ==0;     break;.
f4a0: 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20      case OP_Ne: 
f4b0: 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b     res = res!=0;
f4c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
f4d0: 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72  case OP_Lt:    r
f4e0: 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20  es = res<0;     
f4f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
f500: 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d   OP_Le:    res =
f510: 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65   res<=0;     bre
f520: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
f530: 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Gt:    res = res
f540: 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  >0;      break;.
f550: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
f560: 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b     res = res>=0;
f570: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a       break;.  }.
f580: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
f590: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
f5a0: 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61  ){.    pOut = &a
f5b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
f5c0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
f5d0: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
f5e0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
f5f0: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
f600: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
f610: 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45  res;.    REGISTE
f620: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
f630: 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b   pOut);.  }else{
f640: 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
f650: 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f  aken(res!=0, (pO
f660: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
f670: 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20  ULLEQ)?2:3);.   
f680: 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
f690: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
f6a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 2f 2a  ;.    }.  }.  /*
f6b0: 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65   Undo any change
f6c0: 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41  s made by applyA
f6d0: 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65  ffinity() to the
f6e0: 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
f6f0: 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  . */.  pIn1->fla
f700: 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 70  gs = flags1;.  p
f710: 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61  In3->flags = fla
f720: 67 73 33 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  gs3;.  break;.}.
f730: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d  ./* Opcode: Perm
f740: 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34  utation * * * P4
f750: 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
f760: 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65   permutation use
f770: 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70  d by the OP_Comp
f780: 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20  are operator to 
f790: 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20  be the array.** 
f7a0: 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50  of integers in P
f7b0: 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72  4..**.** The per
f7c0: 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  mutation is only
f7d0: 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65   valid until the
f7e0: 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65   next OP_Compare
f7f0: 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65   that has.** the
f800: 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
f810: 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54  bit set in P5. T
f820: 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f  ypically the OP_
f830: 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75  Permutation shou
f840: 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d  ld .** occur imm
f850: 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74  ediately prior t
f860: 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  o the OP_Compare
f870: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72  ..*/.case OP_Per
f880: 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73  mutation: {.  as
f890: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
f8a0: 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29  e==P4_INTARRAY )
f8b0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
f8c0: 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72  >p4.ai );.  aPer
f8d0: 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  mute = pOp->p4.a
f8e0: 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  i;.  break;.}../
f8f0: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72  * Opcode: Compar
f900: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
f910: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
f920: 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40  P1@P3] <-> r[P2@
f930: 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P3].**.** Compar
f940: 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66  e two vectors of
f950: 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65   registers in re
f960: 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33  g(P1)..reg(P1+P3
f970: 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a  -1) (call this.*
f980: 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e  * vector "A") an
f990: 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65  d in reg(P2)..re
f9a0: 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29  g(P2+P3-1) ("B")
f9b0: 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75  .  Save the resu
f9c0: 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d  lt of.** the com
f9d0: 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20  parison for use 
f9e0: 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a  by the next OP_J
f9f0: 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a  ump instruct..**
fa00: 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
fa10: 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
fa20: 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
fa30: 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70  he order of comp
fa40: 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74  arison is.** det
fa50: 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d  ermined by the m
fa60: 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65  ost recent OP_Pe
fa70: 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74  rmutation operat
fa80: 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f  or.  If the.** O
fa90: 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
faa0: 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  t is clear, then
fab0: 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f   register are co
fac0: 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e  mpared in sequen
fad0: 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a  tial.** order..*
fae0: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79  *.** P4 is a Key
faf0: 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
fb00: 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c  hat defines coll
fb10: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
fb20: 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65  and sort.** orde
fb30: 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61  rs for the compa
fb40: 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  rison.  The perm
fb50: 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20  utation applies 
fb60: 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
fb70: 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e  only.  The KeyIn
fb80: 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  fo elements are 
fb90: 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c  used sequentiall
fba0: 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  y..**.** The com
fbb0: 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72  parison is a sor
fbc0: 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f  t comparison, so
fbd0: 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65   NULLs compare e
fbe0: 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61  qual,.** NULLs a
fbf0: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d  re less than num
fc00: 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  bers, numbers ar
fc10: 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
fc20: 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69  ngs,.** and stri
fc30: 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
fc40: 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65  n blobs..*/.case
fc50: 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20   OP_Compare: {. 
fc60: 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
fc70: 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74  .  int p1;.  int
fc80: 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79   p2;.  const Key
fc90: 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
fca0: 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c    int idx;.  Col
fcb0: 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20  lSeq *pColl;    
fcc0: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
fcd0: 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20  uence to use on 
fce0: 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69  this term */.  i
fcf0: 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
fd00: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
fd10: 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
fd20: 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70  der */..  if( (p
fd30: 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
fd40: 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50  PERMUTE)==0 ) aP
fd50: 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20  ermute = 0;.  n 
fd60: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65  = pOp->p3;.  pKe
fd70: 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
fd80: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
fd90: 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
fda0: 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
fdb0: 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
fdc0: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
fdd0: 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  p2;.#if SQLITE_D
fde0: 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
fdf0: 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
fe00: 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
fe10: 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
fe20: 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
fe30: 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
fe40: 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
fe50: 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
fe60: 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  x<=(p->nMem-p->n
fe70: 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20  Cursor)+1 );.   
fe80: 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
fe90: 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d   p2+mx<=(p->nMem
fea0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
feb0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
fec0: 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
fed0: 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  1+n<=(p->nMem-p-
fee0: 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
fef0: 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
ff00: 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  && p2+n<=(p->nMe
ff10: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
ff20: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
ff30: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
ff40: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
ff50: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
ff60: 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
ff70: 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
ff80: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
ff90: 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
ffa0: 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
ffb0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
ffc0: 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
ffd0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
ffe0: 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
fff0: 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
10000 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
10010 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
10020 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
10030 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   i<pKeyInfo->nFi
10040 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
10050 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
10060 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
10070 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
10080 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
10090 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
100a0 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65  3MemCompare(&aMe
100b0 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d  m[p1+idx], &aMem
100c0 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
100d0 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
100e0 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
100f0 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
10100 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
10110 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
10120 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d    }.  aPermute =
10130 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
10140 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
10150 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
10160 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
10170 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
10180 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
10190 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
101a0 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
101b0 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
101c0 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
101d0 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
101e0 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
101f0 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
10200 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
10210 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
10220 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
10230 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
10240 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
10250 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
10260 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63  pare<0 ){.    pc
10270 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 20   = pOp->p1 - 1; 
10280 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
10290 28 30 2c 33 29 3b 0a 20 20 7d 65 6c 73 65 20 69  (0,3);.  }else i
102a0 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29  f( iCompare==0 )
102b0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
102c0 70 32 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61  p2 - 1;  VdbeBra
102d0 6e 63 68 54 61 6b 65 6e 28 31 2c 33 29 3b 0a 20  nchTaken(1,3);. 
102e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d   }else{.    pc =
102f0 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 20 20 56   pOp->p3 - 1;  V
10300 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32  dbeBranchTaken(2
10310 2c 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ,3);.  }.  break
10320 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10330 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  And P1 P2 P3 * *
10340 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
10350 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b  P3]=(r[P1] && r[
10360 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  P2]).**.** Take 
10370 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20  the logical AND 
10380 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
10390 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
103a0 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74  d P2 and.** writ
103b0 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  e the result int
103c0 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
103d0 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
103e0 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61  1 or P2 is 0 (fa
103f0 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  lse) then the re
10400 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69  sult is 0 even i
10410 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69  f.** the other i
10420 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
10430 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f   NULL and true o
10440 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65  r two NULLs give
10450 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  .** a NULL outpu
10460 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
10470 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a   Or P1 P2 P3 * *
10480 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
10490 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b  P3]=(r[P1] || r[
104a0 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  P2]).**.** Take 
104b0 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f  the logical OR o
104c0 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
104d0 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
104e0 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
104f0 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65  the answer in re
10500 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
10510 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72   If either P1 or
10520 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28   P2 is nonzero (
10530 74 72 75 65 29 20 74 68 65 6e 20 74 68 65 20 72  true) then the r
10540 65 73 75 6c 74 20 69 73 20 31 20 28 74 72 75 65  esult is 1 (true
10550 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65  ).** even if the
10560 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
10570 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
10580 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e  d false or two N
10590 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e  ULLs.** give a N
105a0 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63  ULL output..*/.c
105b0 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20  ase OP_And:     
105c0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
105d0 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c   as TK_AND, in1,
105e0 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
105f0 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20  se OP_Or: {     
10600 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
10610 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69  as TK_OR, in1, i
10620 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e  n2, out3 */.  in
10630 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74  t v1;    /* Left
10640 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41   operand:  0==FA
10650 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
10660 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
10670 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20   */.  int v2;   
10680 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e   /* Right operan
10690 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  d: 0==FALSE, 1==
106a0 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
106b0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70   or NULL */..  p
106c0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
106d0 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
106e0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
106f0 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32  ll ){.    v1 = 2
10700 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
10710 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  1 = sqlite3VdbeI
10720 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
10730 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26  ;.  }.  pIn2 = &
10740 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
10750 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73   if( pIn2->flags
10760 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
10770 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c     v2 = 2;.  }el
10780 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c  se{.    v2 = sql
10790 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
107a0 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20  (pIn2)!=0;.  }. 
107b0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
107c0 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20  ==OP_And ){.    
107d0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
107e0 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c  igned char and_l
107f0 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c  ogic[] = { 0, 0,
10800 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20   0, 0, 1, 2, 0, 
10810 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  2, 2 };.    v1 =
10820 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b   and_logic[v1*3+
10830 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  v2];.  }else{.  
10840 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
10850 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f  nsigned char or_
10860 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31  logic[] = { 0, 1
10870 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c  , 2, 1, 1, 1, 2,
10880 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   1, 2 };.    v1 
10890 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b  = or_logic[v1*3+
108a0 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20  v2];.  }.  pOut 
108b0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
108c0 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b  ;.  if( v1==2 ){
108d0 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
108e0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  lag(pOut, MEM_Nu
108f0 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ll);.  }else{.  
10900 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31    pOut->u.i = v1
10910 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
10920 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
10930 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  nt);.  }.  break
10940 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10950 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Not P1 P2 * * *.
10960 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
10970 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  2]= !r[P1].**.**
10980 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 76   Interpret the v
10990 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
109a0 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e   P1 as a boolean
109b0 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74   value.  Store t
109c0 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f  he.** boolean co
109d0 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69  mplement in regi
109e0 73 74 65 72 20 50 32 2e 20 20 49 66 20 74 68 65  ster P2.  If the
109f0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
10a00 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c  er P1 is .** NUL
10a10 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69  L, then a NULL i
10a20 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a  s stored in P2..
10a30 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20  */.case OP_Not: 
10a40 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
10a50 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
10a60 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f  OT, in1, out2 */
10a70 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
10a80 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
10a90 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
10aa0 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
10ab0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
10ac0 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
10ad0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
10ae0 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  ==0 ){.    pOut-
10af0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
10b00 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
10b10 3d 20 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e  = !sqlite3VdbeIn
10b20 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
10b30 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
10b40 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20   Opcode: BitNot 
10b50 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
10b60 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20  ynopsis: r[P1]= 
10b70 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74  ~r[P1].**.** Int
10b80 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65  erpret the conte
10b90 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
10ba0 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  1 as an integer.
10bb0 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f    Store the.** o
10bc0 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f  nes-complement o
10bd0 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69  f the P1 value i
10be0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
10bf0 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a    If P1 holds.**
10c00 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f   a NULL then sto
10c10 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e  re a NULL in P2.
10c20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e  .*/.case OP_BitN
10c30 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
10c40 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
10c50 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  BITNOT, in1, out
10c60 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
10c70 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
10c80 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
10c90 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
10ca0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
10cb0 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  Out);.  if( (pIn
10cc0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
10cd0 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
10ce0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
10cf0 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
10d00 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33 56 64  u.i = ~sqlite3Vd
10d10 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
10d20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10d30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63  ../* Opcode: Onc
10d40 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
10d50 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 22 6f  .** Check the "o
10d60 6e 63 65 22 20 66 6c 61 67 20 6e 75 6d 62 65 72  nce" flag number
10d70 20 50 31 2e 20 49 66 20 69 74 20 69 73 20 73 65   P1. If it is se
10d80 74 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  t, jump to instr
10d90 75 63 74 69 6f 6e 20 50 32 2e 20 0a 2a 2a 20 4f  uction P2. .** O
10da0 74 68 65 72 77 69 73 65 2c 20 73 65 74 20 74 68  therwise, set th
10db0 65 20 66 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20  e flag and fall 
10dc0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
10dd0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
10de0 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
10df0 64 73 2c 20 74 68 69 73 20 6f 70 63 6f 64 65 20  ds, this opcode 
10e00 63 61 75 73 65 73 20 61 6c 6c 20 66 6f 6c 6c 6f  causes all follo
10e10 77 69 6e 67 20 6f 70 63 6f 64 65 73 20 75 70 20  wing opcodes up 
10e20 74 68 72 6f 75 67 68 20 50 32 0a 2a 2a 20 28 62  through P2.** (b
10e30 75 74 20 6e 6f 74 20 69 6e 63 6c 75 64 69 6e 67  ut not including
10e40 20 50 32 29 20 74 6f 20 72 75 6e 20 6a 75 73 74   P2) to run just
10e50 20 6f 6e 63 65 20 61 6e 64 20 74 6f 20 62 65 20   once and to be 
10e60 73 6b 69 70 70 65 64 20 6f 6e 20 73 75 62 73 65  skipped on subse
10e70 71 75 65 6e 74 0a 2a 2a 20 74 69 6d 65 73 20 74  quent.** times t
10e80 68 72 6f 75 67 68 20 74 68 65 20 6c 6f 6f 70 2e  hrough the loop.
10e90 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 22 6f 6e 63 65  .**.** All "once
10ea0 22 20 66 6c 61 67 73 20 61 72 65 20 69 6e 69 74  " flags are init
10eb0 69 61 6c 6c 79 20 63 6c 65 61 72 65 64 20 77 68  ially cleared wh
10ec0 65 6e 65 76 65 72 20 61 20 70 72 65 70 61 72 65  enever a prepare
10ed0 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66  d statement.** f
10ee0 69 72 73 74 20 62 65 67 69 6e 73 20 74 6f 20 72  irst begins to r
10ef0 75 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  un..*/.case OP_O
10f00 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nce: {          
10f10 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
10f20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
10f30 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 29 3b 0a  p->nOnceFlag );.
10f40 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
10f50 6e 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70  n(p->aOnceFlag[p
10f60 4f 70 2d 3e 70 31 5d 21 3d 30 2c 20 32 29 3b 0a  Op->p1]!=0, 2);.
10f70 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63 65 46 6c    if( p->aOnceFl
10f80 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a 20  ag[pOp->p1] ){. 
10f90 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d     pc = pOp->p2-
10fa0 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
10fb0 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70  p->aOnceFlag[pOp
10fc0 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20  ->p1] = 1;.  }. 
10fd0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10fe0 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50  code: If P1 P2 P
10ff0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
11000 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
11010 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
11020 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65  P1 is true.  The
11030 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
11040 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
11050 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e  it is numeric an
11060 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20  d non-zero.  If 
11070 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
11080 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
11090 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
110a0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20   and only if P3 
110b0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a  is non-zero..*/.
110c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
110d0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
110e0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
110f0 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
11100 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61  egister P1 is Fa
11110 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  lse.  The value.
11120 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
11130 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73   false if it has
11140 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
11150 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68   of zero.  If th
11160 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
11170 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
11180 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
11190 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
111a0 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61   non-zero..*/.ca
111b0 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20  se OP_If:       
111c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
111d0 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f  p, in1 */.case O
111e0 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20  P_IfNot: {      
111f0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
11200 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20  n1 */.  int c;. 
11210 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
11220 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
11230 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
11240 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20  Null ){.    c = 
11250 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65  pOp->p3;.  }else
11260 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
11270 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
11280 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  INT.    c = sqli
11290 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
112a0 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a  pIn1)!=0;.#else.
112b0 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
112c0 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
112d0 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a  1)!=0.0;.#endif.
112e0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
112f0 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20  ode==OP_IfNot ) 
11300 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64  c = !c;.  }.  Vd
11310 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21  beBranchTaken(c!
11320 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20  =0, 2);.  if( c 
11330 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
11340 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
11350 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11360 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a  : IsNull P1 P2 *
11370 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11380 3a 20 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c  :  if r[P1]==NUL
11390 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  L goto P2.**.** 
113a0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
113b0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
113c0 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a  ter P1 is NULL..
113d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c  */.case OP_IsNul
113e0 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
113f0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53  /* same as TK_IS
11400 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20  NULL, jump, in1 
11410 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
11420 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64  m[pOp->p1];.  Vd
11430 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28  beBranchTaken( (
11440 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11450 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a  M_Null)!=0, 2);.
11460 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
11470 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
11480 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
11490 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
114a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
114b0 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31  code: NotNull P1
114c0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
114d0 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21  opsis: if r[P1]!
114e0 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a  =NULL goto P2.**
114f0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
11500 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
11510 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f  egister P1 is no
11520 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73  t NULL.  .*/.cas
11530 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20  e OP_NotNull: { 
11540 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
11550 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c  me as TK_NOTNULL
11560 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  , jump, in1 */. 
11570 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
11580 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72  p->p1];.  VdbeBr
11590 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31  anchTaken( (pIn1
115a0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
115b0 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66  ll)==0, 2);.  if
115c0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
115d0 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
115e0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
115f0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
11600 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11610 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50  : Column P1 P2 P
11620 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
11630 73 69 73 3a 20 20 72 5b 50 33 5d 3d 50 58 0a 2a  sis:  r[P3]=PX.*
11640 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
11650 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72  he data that cur
11660 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
11670 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20   as a structure 
11680 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74  built using.** t
11690 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  he MakeRecord in
116a0 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65  struction.  (See
116b0 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
116c0 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
116d0 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ional.** informa
116e0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66  tion about the f
116f0 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74  ormat of the dat
11700 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65  a.)  Extract the
11710 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a   P2-th column.**
11720 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72   from this recor
11730 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  d.  If there are
11740 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31   less that (P2+1
11750 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20  ) .** values in 
11760 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72  the record, extr
11770 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  act a NULL..**.*
11780 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72  * The value extr
11790 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20  acted is stored 
117a0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
117b0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c  **.** If the col
117c0 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77  umn contains few
117d0 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64  er than P2 field
117e0 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20  s, then extract 
117f0 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20  a NULL.  Or,.** 
11800 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  if the P4 argume
11810 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75  nt is a P4_MEM u
11820 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  se the value of 
11830 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
11840 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
11850 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
11860 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
11870 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50   bit is set on P
11880 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73  5 and P1 is a ps
11890 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
118a0 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
118b0 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73  ache of the curs
118c0 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f  or is reset prio
118d0 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20  r to extracting 
118e0 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54  the column..** T
118f0 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75  he first OP_Colu
11900 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65  mn against a pse
11910 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20  udo-table after 
11920 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
11930 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69   content.** regi
11940 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64  ster has changed
11950 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69   should have thi
11960 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  s bit set..**.**
11970 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
11980 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
11990 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69  LAG_TYPEOFARG bi
119a0 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35  ts are set on P5
119b0 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73   when.** the res
119c0 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65  ult is guarantee
119d0 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65  d to only be use
119e0 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
119f0 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a  t of a length().
11a00 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66  ** or typeof() f
11a10 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74  unction, respect
11a20 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64  ively.  The load
11a30 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f  ing of large blo
11a40 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69  bs can be.** ski
11a50 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  pped for length(
11a60 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e  ) and all conten
11a70 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65  t loading can be
11a80 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70   skipped for typ
11a90 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eof()..*/.case O
11aa0 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 36  P_Column: {.  i6
11ab0 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  4 payloadSize64;
11ac0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
11ad0 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
11ae0 64 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20  d */.  int p2;  
11af0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c            /* col
11b00 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65  umn number to re
11b10 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65  trieve */.  Vdbe
11b20 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f  Cursor *pC;    /
11b30 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
11b40 72 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20  r */.  BtCursor 
11b50 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65  *pCrsr;   /* The
11b60 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f   BTree cursor */
11b70 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b  .  u32 *aOffset;
11b80 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74        /* aOffset
11b90 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f  [i] is offset to
11ba0 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20 66   start of data f
11bb0 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a  or i-th column *
11bc0 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20  /.  int len;    
11bd0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65         /* The le
11be0 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69  ngth of the seri
11bf0 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20  alized data for 
11c00 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  the column */.  
11c10 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
11c20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
11c30 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65  er */.  Mem *pDe
11c40 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68  st;        /* Wh
11c50 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68 65  ere to write the
11c60 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75 65   extracted value
11c70 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20   */.  Mem sMem; 
11c80 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
11c90 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f  storing the reco
11ca0 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
11cb0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
11cc0 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50 61 72 74  zData;   /* Part
11cd0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 62   of the record b
11ce0 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
11cf0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72    const u8 *zHdr
11d00 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70  ;    /* Next unp
11d10 61 72 73 65 64 20 62 79 74 65 20 6f 66 20 74 68  arsed byte of th
11d20 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f  e header */.  co
11d30 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b  nst u8 *zEndHdr;
11d40 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66   /* Pointer to f
11d50 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20  irst byte after 
11d60 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
11d70 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20  u32 offset;     
11d80 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74     /* Offset int
11d90 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20  o the data */.  
11da0 75 33 32 20 73 7a 46 69 65 6c 64 3b 20 20 20 20  u32 szField;    
11db0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11dc0 62 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6e  bytes in the con
11dd0 74 65 6e 74 20 6f 66 20 61 20 66 69 65 6c 64 20  tent of a field 
11de0 2a 2f 0a 20 20 75 33 32 20 61 76 61 69 6c 3b 20  */.  u32 avail; 
11df0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11e00 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76  r of bytes of av
11e10 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a  ailable data */.
11e20 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20 20    u32 t;        
11e30 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63       /* A type c
11e40 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63  ode from the rec
11e50 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  ord header */.  
11e60 75 31 36 20 66 78 3b 20 20 20 20 20 20 20 20 20  u16 fx;         
11e70 20 20 20 2f 2a 20 70 44 65 73 74 2d 3e 66 6c 61     /* pDest->fla
11e80 67 73 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65  gs value */.  Me
11e90 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20  m *pReg;        
11ea0 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20   /* PseudoTable 
11eb0 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a  input register *
11ec0 2f 0a 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  /..  p2 = pOp->p
11ed0 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
11ee0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
11ef0 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
11f00 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65  Cursor) );.  pDe
11f10 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
11f20 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
11f30 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
11f40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
11f50 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
11f60 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
11f70 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
11f80 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
11f90 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
11fa0 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e  assert( p2<pC->n
11fb0 46 69 65 6c 64 20 29 3b 0a 20 20 61 4f 66 66 73  Field );.  aOffs
11fc0 65 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 20 2b  et = pC->aType +
11fd0 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 23 69 66   pC->nField;.#if
11fe0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
11ff0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
12000 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61  assert( pC->pVta
12010 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a  bCursor==0 ); /*
12020 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65 72   OP_Column never
12030 20 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72 74 75   called on virtu
12040 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64  al table */.#end
12050 69 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  if.  pCrsr = pC-
12060 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
12070 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20  rt( pCrsr!=0 || 
12080 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
12090 65 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72 73 72  eg>0 ); /* pCrsr
120a0 20 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64 6f 54   NULL on PseudoT
120b0 61 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72  ables */.  asser
120c0 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70  t( pCrsr!=0 || p
120d0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20 20 20  C->nullRow );   
120e0 20 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 6e 75         /* pC->nu
120f0 6c 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64 6f 54  llRow on PseudoT
12100 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  ables */..  /* I
12110 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63  f the cursor cac
12120 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69  he is stale, bri
12130 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65  ng it up-to-date
12140 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
12150 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
12160 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
12170 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
12180 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
12190 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75  ( pC->cacheStatu
121a0 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 7c  s!=p->cacheCtr |
121b0 7c 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41  | (pOp->p5&OPFLA
121c0 47 5f 43 4c 45 41 52 43 41 43 48 45 29 21 3d 30  G_CLEARCACHE)!=0
121d0 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   ){.    if( pC->
121e0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
121f0 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b   if( pCrsr==0 ){
12200 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
12210 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
12220 52 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  Reg>0 );.       
12230 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43   pReg = &aMem[pC
12240 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
12250 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ];.        asser
12260 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26  t( pReg->flags &
12270 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
12280 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
12290 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b  IsValid(pReg) );
122a0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79  .        pC->pay
122b0 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73  loadSize = pC->s
122c0 7a 52 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70  zRow = avail = p
122d0 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20  Reg->n;.        
122e0 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29  pC->aRow = (u8*)
122f0 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d  pReg->z;.      }
12300 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 4d 65  else{.        Me
12310 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
12320 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  st, MEM_Null);. 
12330 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
12340 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20  olumn_out;.     
12350 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
12360 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73      assert( pCrs
12370 72 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  r );.      if( p
12380 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b  C->isTable==0 ){
12390 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
123a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
123b0 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
123c0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41  ) );.        VVA
123d0 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
123e0 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
123f0 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53  pCrsr, &payloadS
12400 69 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 20 20  ize64);.        
12410 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
12420 54 45 5f 4f 4b 20 29 3b 20 2f 2a 20 54 72 75 65  TE_OK ); /* True
12430 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
12440 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20  orMoveto() call 
12450 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 20  above */.       
12460 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   /* sqlite3Btree
12470 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29 20 75  ParseCellPtr() u
12480 73 65 73 20 67 65 74 56 61 72 69 6e 74 33 32 28  ses getVarint32(
12490 29 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65  ) to extract the
124a0 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 61 79 6c  .        ** payl
124b0 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20  oad size, so it 
124c0 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f  is impossible fo
124d0 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  r payloadSize64 
124e0 74 6f 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a  to be.        **
124f0 20 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32 20   larger than 32 
12500 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20  bits. */.       
12510 20 61 73 73 65 72 74 28 20 28 70 61 79 6c 6f 61   assert( (payloa
12520 64 53 69 7a 65 36 34 20 26 20 53 51 4c 49 54 45  dSize64 & SQLITE
12530 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75 36 34 29  _MAX_U32)==(u64)
12540 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b  payloadSize64 );
12550 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
12560 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  w = sqlite3Btree
12570 4b 65 79 46 65 74 63 68 28 70 43 72 73 72 2c 20  KeyFetch(pCrsr, 
12580 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 20  &avail);.       
12590 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
125a0 20 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53   = (u32)payloadS
125b0 69 7a 65 36 34 3b 0a 20 20 20 20 20 20 7d 65 6c  ize64;.      }el
125c0 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65  se{.        asse
125d0 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
125e0 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
125f0 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  rsr) );.        
12600 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
12610 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53  qlite3BtreeDataS
12620 69 7a 65 28 70 43 72 73 72 2c 20 26 70 43 2d 3e  ize(pCrsr, &pC->
12630 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20  payloadSize);.  
12640 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
12650 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
12660 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63   /* DataSize() c
12670 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20  annot fail */.  
12680 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
12690 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
126a0 61 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61  aFetch(pCrsr, &a
126b0 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20  vail);.      }. 
126c0 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61       assert( ava
126d0 69 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a  il<=65536 );  /*
126e0 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69   Maximum page si
126f0 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20  ze is 64KiB */. 
12700 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79       if( pC->pay
12710 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32  loadSize <= (u32
12720 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20  )avail ){.      
12730 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43    pC->szRow = pC
12740 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  ->payloadSize;. 
12750 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
12760 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
12770 61 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20  avail;.      }. 
12780 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79       if( pC->pay
12790 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29  loadSize > (u32)
127a0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
127b0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
127c0 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
127d0 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d  too_big;.      }
127e0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63  .    }.    pC->c
127f0 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e  acheStatus = p->
12800 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43  cacheCtr;.    pC
12810 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67  ->iHdrOffset = g
12820 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61  etVarint32(pC->a
12830 52 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20  Row, offset);.  
12840 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64    pC->nHdrParsed
12850 20 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66 73 65   = 0;.    aOffse
12860 74 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20  t[0] = offset;. 
12870 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f 66 66     if( avail<off
12880 73 65 74 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  set ){.      /* 
12890 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f  pC->aRow does no
128a0 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74  t have to hold t
128b0 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62  he entire row, b
128c0 75 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65  ut it does at le
128d0 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65  ast.      ** nee
128e0 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68  d to cover the h
128f0 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 65 63  eader of the rec
12900 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f  ord.  If pC->aRo
12910 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  w does not conta
12920 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  in.      ** the 
12930 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c  complete header,
12940 20 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20   then set it to 
12950 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68  zero, forcing th
12960 65 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20  e header to be. 
12970 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61       ** dynamica
12980 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a  lly allocated. *
12990 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77  /.      pC->aRow
129a0 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e   = 0;.      pC->
129b0 73 7a 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 7d  szRow = 0;.    }
129c0 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  ..    /* Make su
129d0 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  re a corrupt dat
129e0 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69  abase has not gi
129f0 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69  ven us an oversi
12a00 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a  ze header..    *
12a10 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f  * Do this now to
12a20 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69   avoid an oversi
12a30 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ze memory alloca
12a40 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  tion..    **.   
12a50 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73   ** Type entries
12a60 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20   can be between 
12a70 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61  1 and 5 bytes ea
12a80 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35  ch.  But 4 and 5
12a90 20 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70   byte.    ** typ
12aa0 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64  es use so much d
12ab0 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74  ata space that t
12ac0 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
12ad0 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a   4096 and 32 of.
12ae0 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73      ** them, res
12af0 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74  pectively.  So t
12b00 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65  he maximum heade
12b10 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73  r length results
12b20 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33   from a.    ** 3
12b30 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65  -byte type for e
12b40 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d  ach of the maxim
12b50 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75  um of 32768 colu
12b60 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20  mns plus three. 
12b70 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65     ** extra byte
12b80 73 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72  s for the header
12b90 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20   length itself. 
12ba0 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39   32768*3 + 3 = 9
12bb0 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  8307..    */.   
12bc0 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38   if( offset > 98
12bd0 33 30 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20  307 || offset > 
12be0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
12bf0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
12c00 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
12c10 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  T;.      goto op
12c20 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20  _column_error;. 
12c30 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d     }.  }..  /* M
12c40 61 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61 73  ake sure at leas
12c50 74 20 74 68 65 20 66 69 72 73 74 20 70 32 2b 31  t the first p2+1
12c60 20 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20   entries of the 
12c70 68 65 61 64 65 72 20 68 61 76 65 20 62 65 65 6e  header have been
12c80 0a 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64  .  ** parsed and
12c90 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69   valid informati
12ca0 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74  on is in aOffset
12cb0 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65  [] and pC->aType
12cc0 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70  []..  */.  if( p
12cd0 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
12ce0 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  2 ){.    /* If t
12cf0 68 65 72 65 20 69 73 20 6d 6f 72 65 20 68 65 61  here is more hea
12d00 64 65 72 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  der available fo
12d10 72 20 70 61 72 73 69 6e 67 20 69 6e 20 74 68 65  r parsing in the
12d20 20 72 65 63 6f 72 64 2c 20 74 72 79 0a 20 20 20   record, try.   
12d30 20 2a 2a 20 74 6f 20 65 78 74 72 61 63 74 20 61   ** to extract a
12d40 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73  dditional fields
12d50 20 75 70 20 74 68 72 6f 75 67 68 20 74 68 65 20   up through the 
12d60 70 32 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a 20  p2+1-th field . 
12d70 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43     */.    if( pC
12d80 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c 61 4f 66  ->iHdrOffset<aOf
12d90 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  fset[0] ){.     
12da0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a 44   /* Make sure zD
12db0 61 74 61 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e  ata points to en
12dc0 6f 75 67 68 20 6f 66 20 74 68 65 20 72 65 63 6f  ough of the reco
12dd0 72 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20  rd to cover the 
12de0 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20  header. */.     
12df0 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30   if( pC->aRow==0
12e00 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73   ){.        mems
12e10 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a  et(&sMem, 0, siz
12e20 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20  eof(sMem));.    
12e30 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
12e40 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
12e50 28 70 43 72 73 72 2c 20 30 2c 20 61 4f 66 66 73  (pCrsr, 0, aOffs
12e60 65 74 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20  et[0], .        
12e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 21 70 43               !pC
12e90 2d 3e 69 73 54 61 62 6c 65 2c 20 26 73 4d 65 6d  ->isTable, &sMem
12ea0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
12eb0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
12ec0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f            goto o
12ed0 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a  p_column_error;.
12ee0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
12ef0 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73    zData = (u8*)s
12f00 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  Mem.z;.      }el
12f10 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74  se{.        zDat
12f20 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20  a = pC->aRow;.  
12f30 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
12f40 2a 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54  * Fill in pC->aT
12f50 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73  ype[i] and aOffs
12f60 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72  et[i] values thr
12f70 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68 20 66  ough the p2-th f
12f80 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 20 20 69  ield. */.      i
12f90 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65   = pC->nHdrParse
12fa0 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74 20  d;.      offset 
12fb0 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20  = aOffset[i];.  
12fc0 20 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61      zHdr = zData
12fd0 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65   + pC->iHdrOffse
12fe0 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72  t;.      zEndHdr
12ff0 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73   = zData + aOffs
13000 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20 61 73 73  et[0];.      ass
13010 65 72 74 28 20 69 3c 3d 70 32 20 26 26 20 7a 48  ert( i<=p2 && zH
13020 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20  dr<zEndHdr );.  
13030 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
13040 69 66 28 20 7a 48 64 72 5b 30 5d 3c 30 78 38 30  if( zHdr[0]<0x80
13050 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74 20   ){.          t 
13060 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20 20 20 20 20  = zHdr[0];.     
13070 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20       zHdr++;.   
13080 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
13090 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71        zHdr += sq
130a0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
130b0 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20  (zHdr, &t);.    
130c0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 43      }.        pC
130d0 2d 3e 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a  ->aType[i] = t;.
130e0 20 20 20 20 20 20 20 20 73 7a 46 69 65 6c 64 20          szField 
130f0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
13100 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20  ialTypeLen(t);. 
13110 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d         offset +=
13120 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20 20 20 20   szField;.      
13130 20 20 69 66 28 20 6f 66 66 73 65 74 3c 73 7a 46    if( offset<szF
13140 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54 72 75 65  ield ){  /* True
13150 20 69 66 20 6f 66 66 73 65 74 20 6f 76 65 72 66   if offset overf
13160 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  lows */.        
13170 20 20 7a 48 64 72 20 3d 20 26 7a 45 6e 64 48 64    zHdr = &zEndHd
13180 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73  r[1];  /* Forces
13190 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20   SQLITE_CORRUPT 
131a0 72 65 74 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a  return below */.
131b0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
131c0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
131d0 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20     i++;.        
131e0 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66  aOffset[i] = off
131f0 73 65 74 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c  set;.      }whil
13200 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72  e( i<=p2 && zHdr
13210 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20  <zEndHdr );.    
13220 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64    pC->nHdrParsed
13230 20 3d 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e   = i;.      pC->
13240 69 48 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33  iHdrOffset = (u3
13250 32 29 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29  2)(zHdr - zData)
13260 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  ;.      if( pC->
13270 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20  aRow==0 ){.     
13280 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
13290 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
132a0 0a 20 20 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c  .        sMem.fl
132b0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
132c0 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
132d0 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72   /* If we have r
132e0 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20  ead more header 
132f0 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f  data than was co
13300 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68  ntained in the h
13310 65 61 64 65 72 2c 0a 20 20 20 20 20 20 2a 2a 20  eader,.      ** 
13320 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66  or if the end of
13330 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
13340 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 70 61  appears to be pa
13350 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  st the end of th
13360 65 0a 20 20 20 20 20 20 2a 2a 20 72 65 63 6f 72  e.      ** recor
13370 64 2c 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64  d, or if the end
13380 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65   of the last fie
13390 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ld appears to be
133a0 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a   before the end.
133b0 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20        ** of the 
133c0 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c  record (when all
133d0 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29   fields present)
133e0 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62  , then we must b
133f0 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 20  e dealing .     
13400 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75   ** with a corru
13410 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  pt database..   
13420 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
13430 28 7a 48 64 72 20 3e 20 7a 45 6e 64 48 64 72 29  (zHdr > zEndHdr)
13440 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73  .       || (offs
13450 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64  et > pC->payload
13460 53 69 7a 65 29 0a 20 20 20 20 20 20 20 7c 7c 20  Size).       || 
13470 28 7a 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20 26  (zHdr==zEndHdr &
13480 26 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70 61  & offset!=pC->pa
13490 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20  yloadSize).     
134a0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
134b0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
134c0 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f  BKPT;.        go
134d0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72  to op_column_err
134e0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
134f0 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74  }..    /* If aft
13500 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74  er trying to ext
13510 72 61 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66  ra new entries f
13520 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20  rom the header, 
13530 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a 20 20  nHdrParsed is.  
13540 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75    ** still not u
13550 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65  p to p2, that me
13560 61 6e 73 20 74 68 61 74 20 74 68 65 20 72 65 63  ans that the rec
13570 6f 72 64 20 68 61 73 20 66 65 77 65 72 20 74 68  ord has fewer th
13580 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c  an p2.    ** col
13590 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65  umns.  So the re
135a0 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74  sult will be eit
135b0 68 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  her the default 
135c0 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e  value or a NULL.
135d0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
135e0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
135f0 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  p2 ){.      if( 
13600 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
13610 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  MEM ){.        s
13620 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
13630 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
13640 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
13650 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20  M_Static);.     
13660 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
13670 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
13680 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  Dest, MEM_Null);
13690 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67  .      }.      g
136a0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
136b0 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  t;.    }.  }..  
136c0 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 63  /* Extract the c
136d0 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70  ontent for the p
136e0 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20  2+1-th column.  
136f0 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79  Control can only
13700 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73  .  ** reach this
13710 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65   point if aOffse
13720 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70  t[p2], aOffset[p
13730 32 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54  2+1], and pC->aT
13740 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a  ype[p2] are.  **
13750 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f   all valid..  */
13760 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43  .  assert( p2<pC
13770 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a  ->nHdrParsed );.
13780 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
13790 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73  LITE_OK );.  ass
137a0 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
137b0 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
137c0 74 73 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69  ts(pDest) );.  i
137d0 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  f( VdbeMemDynami
137e0 63 28 70 44 65 73 74 29 20 29 20 73 71 6c 69 74  c(pDest) ) sqlit
137f0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
13800 28 70 44 65 73 74 29 3b 0a 20 20 74 20 3d 20 70  (pDest);.  t = p
13810 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20  C->aType[p2];.  
13820 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61  if( pC->szRow>=a
13830 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a  Offset[p2+1] ){.
13840 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74      /* This is t
13850 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77  he common case w
13860 68 65 72 65 20 74 68 65 20 64 65 73 69 72 65 64  here the desired
13870 20 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e   content fits on
13880 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20   the original.  
13890 20 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72    ** page - wher
138a0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73  e the content is
138b0 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66   not on an overf
138c0 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20  low page */.    
138d0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
138e0 6c 47 65 74 28 70 43 2d 3e 61 52 6f 77 2b 61 4f  lGet(pC->aRow+aO
138f0 66 66 73 65 74 5b 70 32 5d 2c 20 74 2c 20 70 44  ffset[p2], t, pD
13900 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  est);.  }else{. 
13910 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63     /* This branc
13920 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77  h happens only w
13930 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f  hen content is o
13940 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73  n overflow pages
13950 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70 4f   */.    if( ((pO
13960 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f  p->p5 & (OPFLAG_
13970 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47  LENGTHARG|OPFLAG
13980 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a  _TYPEOFARG))!=0.
13990 20 20 20 20 20 20 20 20 20 20 26 26 20 28 28 74            && ((t
139a0 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30  >=12 && (t&1)==0
139b0 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20  ) || (pOp->p5 & 
139c0 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
139d0 29 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28  )!=0)).     || (
139e0 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62  len = sqlite3Vdb
139f0 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74  eSerialTypeLen(t
13a00 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20  ))==0.    ){.   
13a10 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73     /* Content is
13a20 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a   irrelevant for.
13a30 20 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20 74        **    1. t
13a40 68 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  he typeof() func
13a50 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20  tion,.      **  
13a60 20 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68 28    2. the length(
13a70 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58  X) function if X
13a80 20 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a   is a blob, and.
13a90 20 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20 69        **    3. i
13aa0 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65  f the content le
13ab0 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20  ngth is zero..  
13ac0 20 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67      ** So we mig
13ad0 68 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20 62  ht as well use b
13ae0 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74  ogus content rat
13af0 68 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67  her than reading
13b00 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e  .      ** conten
13b10 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55  t from disk.  NU
13b20 4c 4c 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72  LL will work for
13b30 20 74 68 65 20 76 61 6c 75 65 20 66 6f 72 20 73   the value for s
13b40 74 72 69 6e 67 73 0a 20 20 20 20 20 20 2a 2a 20  trings.      ** 
13b50 61 6e 64 20 62 6c 6f 62 73 20 61 6e 64 20 77 68  and blobs and wh
13b60 61 74 65 76 65 72 20 69 73 20 69 6e 20 74 68 65  atever is in the
13b70 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 76   payloadSize64 v
13b80 61 72 69 61 62 6c 65 0a 20 20 20 20 20 20 2a 2a  ariable.      **
13b90 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65   will work for e
13ba0 76 65 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20  verything else. 
13bb0 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
13bc0 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 74 3c  VdbeSerialGet(t<
13bd0 3d 31 33 20 3f 20 28 75 38 2a 29 26 70 61 79 6c  =13 ? (u8*)&payl
13be0 6f 61 64 53 69 7a 65 36 34 20 3a 20 30 2c 20 74  oadSize64 : 0, t
13bf0 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
13c00 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
13c10 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
13c20 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61  omBtree(pCrsr, a
13c30 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c  Offset[p2], len,
13c40 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20   !pC->isTable,. 
13c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c70 20 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20    pDest);.      
13c80 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
13c90 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
13ca0 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f  o op_column_erro
13cb0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
13cc0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
13cd0 61 6c 47 65 74 28 28 63 6f 6e 73 74 20 75 38 2a  alGet((const u8*
13ce0 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70 44  )pDest->z, t, pD
13cf0 65 73 74 29 3b 0a 20 20 20 20 20 20 70 44 65 73  est);.      pDes
13d00 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  t->flags &= ~MEM
13d10 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  _Ephem;.    }.  
13d20 7d 0a 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d  }.  pDest->enc =
13d30 20 65 6e 63 6f 64 69 6e 67 3b 0a 0a 6f 70 5f 63   encoding;..op_c
13d40 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 2f 2a 20  olumn_out:.  /* 
13d50 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61  If the column va
13d60 6c 75 65 20 69 73 20 61 6e 20 65 70 68 65 6d 65  lue is an epheme
13d70 72 61 6c 20 73 74 72 69 6e 67 2c 20 67 6f 20 61  ral string, go a
13d80 68 65 61 64 20 61 6e 64 20 70 65 72 73 69 73 74  head and persist
13d90 0a 20 20 2a 2a 20 74 68 61 74 20 73 74 72 69 6e  .  ** that strin
13da0 67 20 69 6e 20 63 61 73 65 20 74 68 65 20 63 75  g in case the cu
13db0 72 73 6f 72 20 6d 6f 76 65 73 20 62 65 66 6f 72  rsor moves befor
13dc0 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c  e the column val
13dd0 75 65 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 2e  ue is.  ** used.
13de0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
13df0 63 6f 64 65 20 64 6f 65 73 20 74 68 65 20 65 71  code does the eq
13e00 75 69 76 61 6c 65 6e 74 20 6f 66 20 44 65 65 70  uivalent of Deep
13e10 68 65 6d 65 72 61 6c 69 7a 65 28 29 0a 20 20 2a  hemeralize().  *
13e20 2a 20 62 75 74 20 64 6f 65 73 20 69 74 20 66 61  * but does it fa
13e30 73 74 65 72 2e 20 2a 2f 0a 20 20 69 66 28 20 28  ster. */.  if( (
13e40 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d  pDest->flags & M
13e50 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 26 26 20  EM_Ephem)!=0 && 
13e60 70 44 65 73 74 2d 3e 7a 20 29 7b 0a 20 20 20 20  pDest->z ){.    
13e70 66 78 20 3d 20 70 44 65 73 74 2d 3e 66 6c 61 67  fx = pDest->flag
13e80 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
13e90 5f 42 6c 6f 62 29 3b 0a 20 20 20 20 61 73 73 65  _Blob);.    asse
13ea0 72 74 28 20 66 78 21 3d 30 20 29 3b 0a 20 20 20  rt( fx!=0 );.   
13eb0 20 7a 44 61 74 61 20 3d 20 28 63 6f 6e 73 74 20   zData = (const 
13ec0 75 38 2a 29 70 44 65 73 74 2d 3e 7a 3b 0a 20 20  u8*)pDest->z;.  
13ed0 20 20 6c 65 6e 20 3d 20 70 44 65 73 74 2d 3e 6e    len = pDest->n
13ee0 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
13ef0 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
13f00 52 65 73 69 7a 65 28 70 44 65 73 74 2c 20 6c 65  Resize(pDest, le
13f10 6e 2b 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  n+2) ) goto no_m
13f20 65 6d 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70  em;.    memcpy(p
13f30 44 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20  Dest->z, zData, 
13f40 6c 65 6e 29 3b 0a 20 20 20 20 70 44 65 73 74 2d  len);.    pDest-
13f50 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20  >z[len] = 0;.   
13f60 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d   pDest->z[len+1]
13f70 20 3d 20 30 3b 0a 20 20 20 20 70 44 65 73 74 2d   = 0;.    pDest-
13f80 3e 66 6c 61 67 73 20 3d 20 66 78 7c 4d 45 4d 5f  >flags = fx|MEM_
13f90 54 65 72 6d 3b 0a 20 20 7d 0a 6f 70 5f 63 6f 6c  Term;.  }.op_col
13fa0 75 6d 6e 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44  umn_error:.  UPD
13fb0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
13fc0 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53  (pDest);.  REGIS
13fd0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
13fe0 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65  3, pDest);.  bre
13ff0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
14000 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32  : Affinity P1 P2
14010 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
14020 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b  sis: affinity(r[
14030 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70  P1@P2]).**.** Ap
14040 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74  ply affinities t
14050 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20  o a range of P2 
14060 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
14070 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a  ng with P1..**.*
14080 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67  * P4 is a string
14090 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
140a0 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65  acters long. The
140b0 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
140c0 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
140d0 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
140e0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
140f0 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
14100 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
14110 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
14120 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61  the range..*/.ca
14130 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20  se OP_Affinity: 
14140 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
14150 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20  zAffinity;   /* 
14160 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20  The affinity to 
14170 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20  be applied */.  
14180 63 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20  char cAff;      
14190 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69           /* A si
141a0 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f  ngle character o
141b0 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20  f affinity */.. 
141c0 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
141d0 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
141e0 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29  ( zAffinity!=0 )
141f0 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
14200 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d  inity[pOp->p2]==
14210 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
14220 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
14230 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a  while( (cAff = *
14240 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d  (zAffinity++))!=
14250 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
14260 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65   pIn1 <= &p->aMe
14270 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  m[(p->nMem-p->nC
14280 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
14290 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
142a0 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61  d(pIn1) );.    a
142b0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
142c0 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e  1, cAff, encodin
142d0 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  g);.    pIn1++;.
142e0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
142f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52  /* Opcode: MakeR
14300 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50  ecord P1 P2 P3 P
14310 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
14320 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50   r[P3]=mkrec(r[P
14330 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e  1@P2]).**.** Con
14340 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
14350 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
14360 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65   P1 into the [re
14370 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20  cord format].** 
14380 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65  use as a data re
14390 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61  cord in a databa
143a0 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61  se table or as a
143b0 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e   key.** in an in
143c0 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  dex.  The OP_Col
143d0 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
143e0 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
143f0 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   later..**.** P4
14400 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
14410 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
14420 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
14430 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20  e nth character 
14440 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
14450 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
14460 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
14470 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
14480 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a  ed for the nth.*
14490 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69  * field of the i
144a0 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20  ndex key..**.** 
144b0 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d  The mapping from
144c0 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66   character to af
144d0 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20  finity is given 
144e0 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  by the SQLITE_AF
144f0 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66  F_.** macros def
14500 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e  ined in sqliteIn
14510 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  t.h..**.** If P4
14520 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c   is NULL then al
14530 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68  l index fields h
14540 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79  ave the affinity
14550 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NONE..*/.case O
14560 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a  P_MakeRecord: {.
14570 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64    u8 *zNewRecord
14580 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75  ;        /* A bu
14590 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65  ffer to hold the
145a0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65   data for the ne
145b0 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  w record */.  Me
145c0 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20  m *pRec;        
145d0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
145e0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20  record */.  u64 
145f0 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20  nData;          
14600 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14610 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
14620 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64  ace */.  int nHd
14630 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
14640 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
14650 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
14660 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  ce */.  i64 nByt
14670 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
14680 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71  * Data space req
14690 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72  uired for this r
146a0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
146b0 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20  Zero;           
146c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
146d0 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
146e0 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
146f0 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72  rd */.  int nVar
14700 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
14710 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
14720 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f  s in a varint */
14730 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79  .  u32 serial_ty
14740 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70  pe;       /* Typ
14750 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d  e field */.  Mem
14760 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20   *pData0;       
14770 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65      /* First fie
14780 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65  ld to be combine
14790 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  d into the recor
147a0 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73  d */.  Mem *pLas
147b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
147c0 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74   Last field of t
147d0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
147e0 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
147f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14800 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
14810 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61   record */.  cha
14820 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
14830 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
14840 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74  ity string for t
14850 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
14860 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  nt file_format; 
14870 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f        /* File fo
14880 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20  rmat to use for 
14890 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e  encoding */.  in
148a0 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
148b0 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
148c0 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
148d0 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69  [] header */.  i
148e0 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20  nt j;           
148f0 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75        /* Space u
14900 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72  sed in zNewRecor
14910 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20  d[] content */. 
14920 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20   int len;       
14930 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
14940 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a  h of a field */.
14950 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74  .  /* Assuming t
14960 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69  he record contai
14970 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65  ns N fields, the
14980 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c   record format l
14990 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74  ooks.  ** like t
149a0 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d  his:.  **.  ** -
149b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
149c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
149d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
149e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
149f0 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68  -------.  ** | h
14a00 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30  dr-size | type 0
14a10 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20   | type 1 | ... 
14a20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74  | type N-1 | dat
14a30 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20  a0 | ... | data 
14a40 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d  N-1 | .  ** ----
14a50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14a60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14a70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14a80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14a90 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44  ----.  **.  ** D
14aa0 61 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20  ata(0) is taken 
14ab0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
14ac0 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73  .  Data(1) comes
14ad0 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
14ae0 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20  1+1.  ** and so 
14af0 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  forth..  **.  **
14b00 20 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64   Each type field
14b10 20 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70   is a varint rep
14b20 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65  resenting the se
14b30 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65  rial type of the
14b40 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e   .  ** correspon
14b50 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e  ding data elemen
14b60 74 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64  t (see sqlite3Vd
14b70 62 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e  beSerialType()).
14b80 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69   The.  ** hdr-si
14b90 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f  ze field is also
14ba0 20 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20   a varint which 
14bb0 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72  is the offset fr
14bc0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
14bd0 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63  .  ** of the rec
14be0 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20  ord to data0..  
14bf0 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20  */.  nData = 0; 
14c00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14c10 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
14c20 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48  ta space */.  nH
14c30 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  dr = 0;         
14c40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
14c50 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70  tes of header sp
14c60 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d  ace */.  nZero =
14c70 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
14c80 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
14c90 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
14ca0 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
14cb0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
14cc0 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  p1;.  zAffinity 
14cd0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
14ce0 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
14cf0 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  && pOp->p2>0 && 
14d00 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d  pOp->p2+nField<=
14d10 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
14d20 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74  sor)+1 );.  pDat
14d30 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c  a0 = &aMem[nFiel
14d40 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70  d];.  nField = p
14d50 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20  Op->p2;.  pLast 
14d60 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64  = &pData0[nField
14d70 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d  -1];.  file_form
14d80 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65  at = p->minWrite
14d90 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f  FileFormat;..  /
14da0 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f  * Identify the o
14db0 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a  utput register *
14dc0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
14dd0 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70  >p3<pOp->p1 || p
14de0 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b  Op->p3>=pOp->p1+
14df0 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75  pOp->p2 );.  pOu
14e00 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
14e10 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
14e20 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
14e30 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65  ..  /* Apply the
14e40 20 72 65 71 75 65 73 74 65 64 20 61 66 66 69 6e   requested affin
14e50 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74  ity to all input
14e60 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  s.  */.  assert(
14e70 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29   pData0<=pLast )
14e80 3b 0a 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74  ;.  if( zAffinit
14e90 79 20 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20  y ){.    pRec = 
14ea0 70 44 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a  pData0;.    do{.
14eb0 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e        applyAffin
14ec0 69 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41  ity(pRec++, *(zA
14ed0 66 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f  ffinity++), enco
14ee0 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 73 73  ding);.      ass
14ef0 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30  ert( zAffinity[0
14f00 5d 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c  ]==0 || pRec<=pL
14f10 61 73 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c  ast );.    }whil
14f20 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20  e( zAffinity[0] 
14f30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f  );.  }..  /* Loo
14f40 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c  p through the el
14f50 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c  ements that will
14f60 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63   make up the rec
14f70 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20  ord to figure.  
14f80 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20  ** out how much 
14f90 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65  space is require
14fa0 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  d for the new re
14fb0 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65  cord..  */.  pRe
14fc0 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b  c = pLast;.  do{
14fd0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
14fe0 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b  IsValid(pRec) );
14ff0 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65  .    serial_type
15000 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
15010 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66  rialType(pRec, f
15020 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20  ile_format);.   
15030 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64   len = sqlite3Vd
15040 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
15050 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20  serial_type);.  
15060 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
15070 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
15080 20 20 20 20 20 20 69 66 28 20 6e 44 61 74 61 20        if( nData 
15090 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
150a0 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42  e3VdbeMemExpandB
150b0 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20 20  lob(pRec);.     
150c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
150d0 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75  nZero += pRec->u
150e0 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20  .nZero;.        
150f0 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e  len -= pRec->u.n
15100 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Zero;.      }.  
15110 20 20 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d    }.    nData +=
15120 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74 63 61   len;.    testca
15130 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d  se( serial_type=
15140 3d 31 32 37 20 29 3b 0a 20 20 20 20 74 65 73 74  =127 );.    test
15150 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70  case( serial_typ
15160 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e 48  e==128 );.    nH
15170 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70  dr += serial_typ
15180 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73 71 6c  e<=127 ? 1 : sql
15190 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65  ite3VarintLen(se
151a0 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 7d 77  rial_type);.  }w
151b0 68 69 6c 65 28 20 28 2d 2d 70 52 65 63 29 3e 3d  hile( (--pRec)>=
151c0 70 44 61 74 61 30 20 29 3b 0a 0a 20 20 2f 2a 20  pData0 );..  /* 
151d0 41 64 64 20 74 68 65 20 69 6e 69 74 69 61 6c 20  Add the initial 
151e0 68 65 61 64 65 72 20 76 61 72 69 6e 74 20 61 6e  header varint an
151f0 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69 7a 65  d total the size
15200 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28 20   */.  testcase( 
15210 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74  nHdr==126 );.  t
15220 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31  estcase( nHdr==1
15230 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48 64 72  27 );.  if( nHdr
15240 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20  <=126 ){.    /* 
15250 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  The common case 
15260 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 31  */.    nHdr += 1
15270 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
15280 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66 20 61  * Rare case of a
15290 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20 68 65   really large he
152a0 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72  ader */.    nVar
152b0 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72  int = sqlite3Var
152c0 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20  intLen(nHdr);.  
152d0 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e    nHdr += nVarin
152e0 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61 72 69  t;.    if( nVari
152f0 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt<sqlite3Varint
15300 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48 64 72  Len(nHdr) ) nHdr
15310 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20  ++;.  }.  nByte 
15320 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 20 20  = nHdr+nData;.  
15330 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
15340 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
15350 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
15360 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
15370 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
15380 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  re the output re
15390 67 69 73 74 65 72 20 68 61 73 20 61 20 62 75 66  gister has a buf
153a0 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  fer large enough
153b0 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20   to store .  ** 
153c0 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20  the new record. 
153d0 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  The output regis
153e0 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73  ter (pOp->p3) is
153f0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a   not allowed to.
15400 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74    ** be one of t
15410 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
15420 72 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20  rs (because the 
15430 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74  following call t
15440 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  o.  ** sqlite3Vd
15450 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73  beMemClearAndRes
15460 69 7a 65 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62  ize() could clob
15470 62 65 72 20 74 68 65 20 76 61 6c 75 65 20 62 65  ber the value be
15480 66 6f 72 65 20 69 74 20 69 73 20 75 73 65 64 29  fore it is used)
15490 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c  ..  */.  if( sql
154a0 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72  ite3VdbeMemClear
154b0 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20  AndResize(pOut, 
154c0 28 69 6e 74 29 6e 42 79 74 65 29 20 29 7b 0a 20  (int)nByte) ){. 
154d0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
154e0 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64    }.  zNewRecord
154f0 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a   = (u8 *)pOut->z
15500 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68  ;..  /* Write th
15510 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20  e record */.  i 
15520 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e  = putVarint32(zN
15530 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b  ewRecord, nHdr);
15540 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61  .  j = nHdr;.  a
15550 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
15560 4c 61 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d  Last );.  pRec =
15570 20 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20   pData0;.  do{. 
15580 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
15590 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
155a0 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
155b0 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 69  e_format);.    i
155c0 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28   += putVarint32(
155d0 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20  &zNewRecord[i], 
155e0 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20  serial_type);   
155f0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69           /* seri
15600 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 6a  al type */.    j
15610 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53   += sqlite3VdbeS
15620 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65  erialPut(&zNewRe
15630 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73  cord[j], pRec, s
15640 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20  erial_type); /* 
15650 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68  content */.  }wh
15660 69 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70  ile( (++pRec)<=p
15670 4c 61 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Last );.  assert
15680 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61  ( i==nHdr );.  a
15690 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20  ssert( j==nByte 
156a0 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
156b0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
156c0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
156d0 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
156e0 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
156f0 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  te;.  pOut->flag
15700 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20  s = MEM_Blob;.  
15710 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20  if( nZero ){.   
15720 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d   pOut->u.nZero =
15730 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74   nZero;.    pOut
15740 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a  ->flags |= MEM_Z
15750 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  ero;.  }.  pOut-
15760 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
15770 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
15780 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
15790 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65   converted to te
157a0 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52  xt */.  REGISTER
157b0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
157c0 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
157d0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
157e0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
157f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74  /* Opcode: Count
15800 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
15810 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
15820 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74  count().**.** St
15830 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ore the number o
15840 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e  f entries (an in
15850 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20  teger value) in 
15860 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
15870 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79  ex .** opened by
15880 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65   cursor P1 in re
15890 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66  gister P2.*/.#if
158a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
158b0 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65  _BTREECOUNT.case
158c0 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20   OP_Count: {    
158d0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
158e0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34  release */.  i64
158f0 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72   nEntry;.  BtCur
15900 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70  sor *pCrsr;..  p
15910 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  Crsr = p->apCsr[
15920 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f  pOp->p1]->pCurso
15930 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
15940 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d  sr );.  nEntry =
15950 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
15960 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74  ed.  Only used t
15970 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
15980 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ing. */.  rc = s
15990 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74  qlite3BtreeCount
159a0 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29  (pCrsr, &nEntry)
159b0 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
159c0 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b  nEntry;.  break;
159d0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
159e0 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74 20  code: Savepoint 
159f0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
15a00 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65 20  * Open, release 
15a10 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  or rollback the 
15a20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20  savepoint named 
15a30 62 79 20 70 61 72 61 6d 65 74 65 72 20 50 34 2c  by parameter P4,
15a40 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e   depending.** on
15a50 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31   the value of P1
15a60 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20  . To open a new 
15a70 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30  savepoint, P1==0
15a80 2e 20 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  . To release (co
15a90 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73  mmit) an.** exis
15aa0 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c 20  ting savepoint, 
15ab0 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c  P1==1, or to rol
15ac0 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e  lback an existin
15ad0 67 20 73 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d  g savepoint P1==
15ae0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61  2..*/.case OP_Sa
15af0 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74  vepoint: {.  int
15b00 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 20 20   p1;            
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15b20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f 70 65 72  Value of P1 oper
15b30 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  and */.  char *z
15b40 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
15b50 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
15b60 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f   of savepoint */
15b70 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20  .  int nName;.  
15b80 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b  Savepoint *pNew;
15b90 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53  .  Savepoint *pS
15ba0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65  avepoint;.  Save
15bb0 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69  point *pTmp;.  i
15bc0 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20  nt iSavepoint;. 
15bd0 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d   int ii;..  p1 =
15be0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d   pOp->p1;.  zNam
15bf0 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a  e = pOp->p4.z;..
15c00 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
15c10 20 74 68 65 20 70 31 20 70 61 72 61 6d 65 74 65   the p1 paramete
15c20 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f  r is valid. Also
15c30 20 74 68 61 74 20 69 66 20 74 68 65 72 65 20 69   that if there i
15c40 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74  s no open.  ** t
15c50 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
15c60 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65   there cannot be
15c70 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e   any savepoints.
15c80 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28   .  */.  assert(
15c90 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d   db->pSavepoint=
15ca0 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f  =0 || db->autoCo
15cb0 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  mmit==0 );.  ass
15cc0 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49  ert( p1==SAVEPOI
15cd0 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41  NT_BEGIN||p1==SA
15ce0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c  VEPOINT_RELEASE|
15cf0 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52  |p1==SAVEPOINT_R
15d00 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73  OLLBACK );.  ass
15d10 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
15d20 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61  int || db->isTra
15d30 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
15d40 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
15d50 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74  ( checkSavepoint
15d60 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20 20 61  Count(db) );.  a
15d70 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
15d80 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 70 31  der );..  if( p1
15d90 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
15da0 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  N ){.    if( db-
15db0 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b  >nVdbeWrite>0 ){
15dc0 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20  .      /* A new 
15dd0 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74  savepoint cannot
15de0 20 62 65 20 63 72 65 61 74 65 64 20 69 66 20 74   be created if t
15df0 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
15e00 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20  write .      ** 
15e10 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e  statements (i.e.
15e20 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65   open read/write
15e30 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f   incremental blo
15e40 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20  b handles)..    
15e50 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
15e60 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
15e70 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
15e80 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f  nnot open savepo
15e90 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20  int - ".        
15ea0 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
15eb0 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
15ec0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
15ed0 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
15ee0 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20  {.      nName = 
15ef0 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
15f00 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66  zName);..#ifndef
15f10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
15f20 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20  TUALTABLE.      
15f30 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20  /* This call is 
15f40 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20  Ok even if this 
15f50 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74  savepoint is act
15f60 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74  ually a transact
15f70 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ion.      ** sav
15f80 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72  epoint (and ther
15f90 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74  efore should not
15fa0 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69   prompt xSavepoi
15fb0 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e  nt()) callbacks.
15fc0 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69  .      ** If thi
15fd0 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
15fe0 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  on savepoint bei
15ff0 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73  ng opened, it is
16000 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20   guaranteed.    
16010 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62    ** that the db
16020 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61  ->aVTrans[] arra
16030 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a  y is empty.  */.
16040 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
16050 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
16060 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d  || db->nVTrans==
16070 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 );.      rc = 
16080 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
16090 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
160a0 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20  NT_BEGIN,.      
160b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160c0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
160d0 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61  tatement+db->nSa
160e0 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
160f0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
16100 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
16110 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
16120 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72  dif..      /* Cr
16130 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70  eate a new savep
16140 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20  oint structure. 
16150 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20  */.      pNew = 
16160 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
16170 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61  aw(db, sizeof(Sa
16180 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31  vepoint)+nName+1
16190 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65  );.      if( pNe
161a0 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65  w ){.        pNe
161b0 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72  w->zName = (char
161c0 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20   *)&pNew[1];.   
161d0 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77       memcpy(pNew
161e0 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20  ->zName, zName, 
161f0 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20  nName+1);.    . 
16200 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
16210 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72  re is no open tr
16220 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
16230 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73  mark this as a s
16240 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a  pecial.        *
16250 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  * "transaction s
16260 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20  avepoint". */.  
16270 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
16280 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
16290 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
162a0 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
162b0 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
162c0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
162d0 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
162e0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  e{.          db-
162f0 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20  >nSavepoint++;. 
16300 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a 20 20         }.    .  
16310 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68        /* Link th
16320 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  e new savepoint 
16330 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
16340 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e  e handle's list.
16350 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77   */.        pNew
16360 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53  ->pNext = db->pS
16370 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
16380 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
16390 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20   = pNew;.       
163a0 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
163b0 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
163c0 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
163d0 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65    pNew->nDeferre
163e0 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  dImmCons = db->n
163f0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
16400 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
16410 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76   }else{.    iSav
16420 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20  epoint = 0;..   
16430 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d   /* Find the nam
16440 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  ed savepoint. If
16450 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63   there is no suc
16460 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65  h savepoint, the
16470 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65  n an.    ** an e
16480 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
16490 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a   to the user.  *
164a0 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20  /.    for(.     
164b0 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62   pSavepoint = db
164c0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20  ->pSavepoint; . 
164d0 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
164e0 26 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  && sqlite3StrICm
164f0 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e  p(pSavepoint->zN
16500 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  ame, zName);.   
16510 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
16520 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
16530 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69  t.    ){.      i
16540 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20  Savepoint++;.   
16550 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76   }.    if( !pSav
16560 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  epoint ){.      
16570 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
16580 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
16590 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70  , "no such savep
165a0 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65  oint: %s", zName
165b0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
165c0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
165d0 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56  }else if( db->nV
165e0 64 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31  dbeWrite>0 && p1
165f0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
16600 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ASE ){.      /* 
16610 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  It is not possib
16620 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63  le to release (c
16630 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69  ommit) a savepoi
16640 6e 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20  nt if there are 
16650 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65  .      ** active
16660 20 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74   write statement
16670 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  s..      */.    
16680 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
16690 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
166a0 64 62 2c 20 0a 20 20 20 20 20 20 20 20 22 63 61  db, .        "ca
166b0 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20 73 61 76  nnot release sav
166c0 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61  epoint - SQL sta
166d0 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
166e0 65 73 73 22 0a 20 20 20 20 20 20 29 3b 0a 20 20  ess".      );.  
166f0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
16700 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
16710 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72  ..      /* Deter
16720 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
16730 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72  not this is a tr
16740 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
16750 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20  int. If so,.    
16760 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73    ** and this is
16770 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61   a RELEASE comma
16780 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72  nd, then the cur
16790 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
167a0 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f   .      ** is co
167b0 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20  mmitted. .      
167c0 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54  */.      int isT
167d0 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61  ransaction = pSa
167e0 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d  vepoint->pNext==
167f0 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73  0 && db->isTrans
16800 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
16810 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61  .      if( isTra
16820 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d  nsaction && p1==
16830 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
16840 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  E ){.        if(
16850 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
16860 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
16870 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
16880 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
16890 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
168a0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
168b0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
168c0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
168d0 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
168e0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
168f0 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20            p->pc 
16900 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 20 20  = pc;.          
16910 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
16920 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   0;.          p-
16930 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
16940 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
16950 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
16960 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
16970 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
16980 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
16990 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63   = 0;.        rc
169a0 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20   = p->rc;.      
169b0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69  }else{.        i
169c0 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e  Savepoint = db->
169d0 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61  nSavepoint - iSa
169e0 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20  vepoint - 1;.   
169f0 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
16a00 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
16a10 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ){.          for
16a20 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
16a30 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
16a40 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
16a50 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73  eeTripAllCursors
16a60 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
16a70 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 29 3b  , SQLITE_ABORT);
16a80 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
16a90 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66       }.        f
16aa0 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
16ab0 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
16ac0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
16ad0 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74  e3BtreeSavepoint
16ae0 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
16af0 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
16b00 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
16b10 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
16b20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f  {.            go
16b30 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
16b40 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
16b50 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
16b60 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
16b70 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
16b80 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51  && (db->flags&SQ
16b90 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
16ba0 65 73 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  es)!=0 ){.      
16bb0 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
16bc0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
16bd0 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20  nts(db);.       
16be0 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41     sqlite3ResetA
16bf0 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
16c00 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20  ction(db);.     
16c10 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d       db->flags =
16c20 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51   (db->flags | SQ
16c30 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
16c40 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  es);.        }. 
16c50 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
16c60 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  /* Regardless of
16c70 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
16c80 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f   a RELEASE or RO
16c90 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20  LLBACK, destroy 
16ca0 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61  all .      ** sa
16cb0 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20  vepoints nested 
16cc0 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61  inside of the sa
16cd0 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
16ce0 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20  erated on. */.  
16cf0 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70      while( db->p
16d00 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65  Savepoint!=pSave
16d10 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  point ){.       
16d20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76   pTmp = db->pSav
16d30 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
16d40 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
16d50 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20   pTmp->pNext;.  
16d60 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
16d70 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20  ree(db, pTmp);. 
16d80 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
16d90 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d  point--;.      }
16da0 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74  ..      /* If it
16db0 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74   is a RELEASE, t
16dc0 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20  hen destroy the 
16dd0 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
16de0 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20  operated on .   
16df0 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74     ** too. If it
16e00 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54   is a ROLLBACK T
16e10 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20  O, then set the 
16e20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  number of deferr
16e30 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ed .      ** con
16e40 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
16e50 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  ns present in th
16e60 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
16e70 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20  e value stored. 
16e80 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65       ** when the
16e90 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63   savepoint was c
16ea0 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20  reated.  */.    
16eb0 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
16ec0 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
16ed0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
16ee0 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70  Savepoint==db->p
16ef0 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20  Savepoint );.   
16f00 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
16f10 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
16f20 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
16f30 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
16f40 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b, pSavepoint);.
16f50 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73 54          if( !isT
16f60 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ransaction ){.  
16f70 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
16f80 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
16f90 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b    }.      }else{
16fa0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65  .        db->nDe
16fb0 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61  ferredCons = pSa
16fc0 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
16fd0 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20  edCons;.        
16fe0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
16ff0 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
17000 74 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  t->nDeferredImmC
17010 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ons;.      }..  
17020 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
17030 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  action ){.      
17040 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
17050 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
17060 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  p1, iSavepoint);
17070 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
17080 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
17090 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
170a0 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
170b0 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b    }.  }..  break
170c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
170d0 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32  AutoCommit P1 P2
170e0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74   * * *.**.** Set
170f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75   the database au
17100 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74  to-commit flag t
17110 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49  o P1 (1 or 0). I
17120 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f  f P2 is true, ro
17130 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63  ll.** back any c
17140 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20  urrently active 
17150 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f  btree transactio
17160 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ns. If there are
17170 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56   any active.** V
17180 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74  Ms (apart from t
17190 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61  his one), then a
171a0 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e   ROLLBACK fails.
171b0 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73    A COMMIT fails
171c0 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65   if.** there are
171d0 20 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20   active writing 
171e0 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d  VMs or active VM
171f0 73 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65  s that use share
17200 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54  d cache..**.** T
17210 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
17220 63 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f  causes the VM to
17230 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   halt..*/.case O
17240 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a  P_AutoCommit: {.
17250 20 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74    int desiredAut
17260 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69  oCommit;.  int i
17270 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20  Rollback;.  int 
17280 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73  turnOnAC;..  des
17290 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d  iredAutoCommit =
172a0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c   pOp->p1;.  iRol
172b0 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b  lback = pOp->p2;
172c0 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65  .  turnOnAC = de
172d0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
172e0 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && !db->autoComm
172f0 69 74 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65  it;.  assert( de
17300 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
17310 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74  =1 || desiredAut
17320 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
17330 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
17340 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
17350 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a  iRollback==0 );.
17360 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56    assert( db->nV
17370 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20  dbeActive>0 );  
17380 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73  /* At least this
17390 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76   one VM is activ
173a0 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
173b0 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
173c0 23 69 66 20 30 0a 20 20 69 66 28 20 74 75 72 6e  #if 0.  if( turn
173d0 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c 62 61 63  OnAC && iRollbac
173e0 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 41 63  k && db->nVdbeAc
173f0 74 69 76 65 3e 31 20 29 7b 0a 20 20 20 20 2f 2a  tive>1 ){.    /*
17400 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
17410 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20  tion implements 
17420 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e 64 20 6f  a ROLLBACK and o
17430 74 68 65 72 20 56 4d 73 20 61 72 65 0a 20 20 20  ther VMs are.   
17440 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e   ** still runnin
17450 67 2c 20 61 6e 64 20 61 20 74 72 61 6e 73 61 63  g, and a transac
17460 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 2c 20  tion is active, 
17470 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
17480 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20 2a  indicating.    *
17490 2a 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72  * that the other
174a0 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65   VMs must comple
174b0 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a  te first. .    *
174c0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  /.    sqlite3Set
174d0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
174e0 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
174f0 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63  rollback transac
17500 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20  tion - ".       
17510 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
17520 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
17530 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
17540 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 0a 23 65  BUSY;.  }else.#e
17550 6e 64 69 66 0a 20 20 69 66 28 20 74 75 72 6e 4f  ndif.  if( turnO
17560 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63  nAC && !iRollbac
17570 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 57 72  k && db->nVdbeWr
17580 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20  ite>0 ){.    /* 
17590 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
175a0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ion implements a
175b0 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65   COMMIT and othe
175c0 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e  r VMs are writin
175d0 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20  g.    ** return 
175e0 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
175f0 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74 68  ing that the oth
17600 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70  er VMs must comp
17610 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20  lete first. .   
17620 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53   */.    sqlite3S
17630 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
17640 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
17650 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63  t commit transac
17660 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20  tion - ".       
17670 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
17680 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
17690 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
176a0 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66  BUSY;.  }else if
176b0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
176c0 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d  mit!=db->autoCom
176d0 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69  mit ){.    if( i
176e0 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20  Rollback ){.    
176f0 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
17700 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29  dAutoCommit==1 )
17710 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  ;.      sqlite3R
17720 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53  ollbackAll(db, S
17730 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
17740 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d  BACK);.      db-
17750 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
17760 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28  .    }else if( (
17770 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
17780 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
17790 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
177a0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
177b0 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  urn;.    }else{.
177c0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
177d0 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69 72  mmit = (u8)desir
177e0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
177f0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
17800 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
17810 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
17820 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
17830 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
17840 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64  ommit = (u8)(1-d
17850 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17860 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63  );.        p->rc
17870 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
17880 55 53 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  USY;.        got
17890 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
178a0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
178b0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
178c0 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20  atement==0 );.  
178d0 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61    sqlite3CloseSa
178e0 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20  vepoints(db);.  
178f0 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
17900 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
17910 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  rc = SQLITE_DONE
17920 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
17930 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
17940 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20  RROR;.    }.    
17950 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
17960 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
17970 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
17980 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
17990 0a 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72  .        (!desir
179a0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63  edAutoCommit)?"c
179b0 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72  annot start a tr
179c0 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e  ansaction within
179d0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a   a transaction":
179e0 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c  (.        (iRoll
179f0 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f  back)?"cannot ro
17a00 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e  llback - no tran
17a10 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
17a20 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  e":.            
17a30 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63         "cannot c
17a40 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73  ommit - no trans
17a50 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
17a60 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20  "));.         . 
17a70 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
17a80 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61  RROR;.  }.  brea
17a90 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
17aa0 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20   Transaction P1 
17ab0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
17ac0 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61  * Begin a transa
17ad0 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73  ction on databas
17ae0 65 20 50 31 20 69 66 20 61 20 74 72 61 6e 73 61  e P1 if a transa
17af0 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72  ction is not alr
17b00 65 61 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a  eady.** active..
17b10 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d  ** If P2 is non-
17b20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69  zero, then a wri
17b30 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  te-transaction i
17b40 73 20 73 74 61 72 74 65 64 2c 20 6f 72 20 69 66  s started, or if
17b50 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e   a .** read-tran
17b60 73 61 63 74 69 6f 6e 20 69 73 20 61 6c 72 65 61  saction is alrea
17b70 64 79 20 61 63 74 69 76 65 2c 20 69 74 20 69 73  dy active, it is
17b80 20 75 70 67 72 61 64 65 64 20 74 6f 20 61 20 77   upgraded to a w
17b90 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
17ba0 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65  ..** If P2 is ze
17bb0 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d  ro, then a read-
17bc0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
17bd0 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31  tarted..**.** P1
17be0 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
17bf0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
17c00 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  le on which the 
17c10 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a  transaction is.*
17c20 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65  * started.  Inde
17c30 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  x 0 is the main 
17c40 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
17c50 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68 65  d index 1 is the
17c60 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f  .** file used fo
17c70 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  r temporary tabl
17c80 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20  es.  Indices of 
17c90 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73  2 or more are us
17ca0 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68  ed for.** attach
17cb0 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a  ed databases..**
17cc0 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74  .** If a write-t
17cd0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
17ce0 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56 64  arted and the Vd
17cf0 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  be.usesStmtJourn
17d00 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72  al flag is.** tr
17d10 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69 73  ue (this flag is
17d20 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62 65   set if the Vdbe
17d30 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65   may modify more
17d40 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e   than one row an
17d50 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61  d may.** throw a
17d60 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f  n ABORT exceptio
17d70 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20  n), a statement 
17d80 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
17d90 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a  also be opened..
17da0 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63  ** More specific
17db0 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e  ally, a statemen
17dc0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
17dd0 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65 20   opened iff the 
17de0 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
17df0 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e  ection is curren
17e00 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63  tly not in autoc
17e10 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69  ommit mode, or i
17e20 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65  f there are othe
17e30 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74  r.** active stat
17e40 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d  ements. A statem
17e50 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
17e60 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67  allows the chang
17e70 65 73 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a  es made by this.
17e80 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f  ** VDBE to be ro
17e90 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20  lled back after 
17ea0 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74  an error without
17eb0 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20   having to roll 
17ec0 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69  back the.** enti
17ed0 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  re transaction. 
17ee0 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65  If no error is e
17ef0 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20  ncountered, the 
17f00 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
17f10 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75  ction.** will au
17f20 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d  tomatically comm
17f30 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45  it when the VDBE
17f40 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   halts..**.** If
17f50 20 50 35 21 3d 30 20 74 68 65 6e 20 74 68 69 73   P5!=0 then this
17f60 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63 68 65   opcode also che
17f70 63 6b 73 20 74 68 65 20 73 63 68 65 6d 61 20 63  cks the schema c
17f80 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74 20 50 33  ookie against P3
17f90 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 63 68 65  .** and the sche
17fa0 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ma generation co
17fb0 75 6e 74 65 72 20 61 67 61 69 6e 73 74 20 50 34  unter against P4
17fc0 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20  ..** The cookie 
17fd0 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75  changes its valu
17fe0 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64  e whenever the d
17ff0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
18000 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20  hanges..** This 
18010 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65  operation is use
18020 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e  d to detect when
18030 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65   that the cookie
18040 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20   has changed.** 
18050 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75 72  and that the cur
18060 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65  rent process nee
18070 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68 65  ds to reread the
18080 20 73 63 68 65 6d 61 2e 20 20 49 66 20 74 68 65   schema.  If the
18090 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69   schema.** cooki
180a0 65 20 69 6e 20 50 33 20 64 69 66 66 65 72 73 20  e in P3 differs 
180b0 66 72 6f 6d 20 74 68 65 20 73 63 68 65 6d 61 20  from the schema 
180c0 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20 64 61  cookie in the da
180d0 74 61 62 61 73 65 20 68 65 61 64 65 72 20 6f 72  tabase header or
180e0 0a 2a 2a 20 69 66 20 74 68 65 20 73 63 68 65 6d  .** if the schem
180f0 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  a generation cou
18100 6e 74 65 72 20 69 6e 20 50 34 20 64 69 66 66 65  nter in P4 diffe
18110 72 73 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72  rs from the curr
18120 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f  ent.** generatio
18130 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20  n counter, then 
18140 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  an SQLITE_SCHEMA
18150 20 65 72 72 6f 72 20 69 73 20 72 61 69 73 65 64   error is raised
18160 20 61 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a   and execution.*
18170 2a 20 68 61 6c 74 73 2e 20 20 54 68 65 20 73 71  * halts.  The sq
18180 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77 72 61  lite3_step() wra
18190 70 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69  pper function mi
181a0 67 68 74 20 74 68 65 6e 20 72 65 70 72 65 70 61  ght then reprepa
181b0 72 65 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d  re the.** statem
181c0 65 6e 74 20 61 6e 64 20 72 65 72 75 6e 20 69 74  ent and rerun it
181d0 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
181e0 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ing..*/.case OP_
181f0 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20  Transaction: {. 
18200 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 69   Btree *pBt;.  i
18210 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20  nt iMeta;.  int 
18220 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72 74 28  iGen;..  assert(
18230 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
18240 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
18250 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70  adOnly==0 || pOp
18260 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73  ->p2==0 );.  ass
18270 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
18280 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
18290 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
182a0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
182b0 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
182c0 29 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ) );.  if( pOp->
182d0 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73  p2 && (db->flags
182e0 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f   & SQLITE_QueryO
182f0 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20 20 72  nly)!=0 ){.    r
18300 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41 44 4f  c = SQLITE_READO
18310 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  NLY;.    goto ab
18320 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
18330 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20 64 62  ;.  }.  pBt = db
18340 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
18350 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29  Bt;..  if( pBt )
18360 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
18370 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
18380 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b  s(pBt, pOp->p2);
18390 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
183a0 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
183b0 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
183c0 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
183d0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
183e0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
183f0 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
18400 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
18410 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
18420 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
18430 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  or;.    }..    i
18440 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d  f( pOp->p2 && p-
18450 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  >usesStmtJournal
18460 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61   .     && (db->a
18470 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
18480 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29  db->nVdbeRead>1)
18490 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61   .    ){.      a
184a0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
184b0 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
184c0 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ) );.      if( p
184d0 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
184e0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
184f0 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
18500 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76  t>=0 && db->nSav
18510 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20  epoint>=0 );.   
18520 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
18530 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20  ent++; .        
18540 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20  p->iStatement = 
18550 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
18560 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b   db->nStatement;
18570 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
18580 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
18590 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41  Savepoint(db, SA
185a0 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70  VEPOINT_BEGIN, p
185b0 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b  ->iStatement-1);
185c0 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
185d0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
185e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
185f0 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70  BtreeBeginStmt(p
18600 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  Bt, p->iStatemen
18610 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  t);.      }..   
18620 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20     /* Store the 
18630 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66  current value of
18640 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
18650 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63  ndles deferred c
18660 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20  onstraint.      
18670 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74  ** counter. If t
18680 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
18690 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
186a0 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
186b0 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76  ,.      ** the v
186c0 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75  alue of this cou
186d0 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65  nter needs to be
186e0 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20   restored too.  
186f0 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d  */.      p->nStm
18700 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  tDefCons = db->n
18710 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
18720 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49      p->nStmtDefI
18730 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  mmCons = db->nDe
18740 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
18750 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74     }..    /* Gat
18760 68 65 72 20 74 68 65 20 73 63 68 65 6d 61 20 76  her the schema v
18770 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
18780 72 20 63 68 65 63 6b 69 6e 67 20 2a 2f 0a 20 20  r checking */.  
18790 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
187a0 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45 45  tMeta(pBt, BTREE
187b0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c  _SCHEMA_VERSION,
187c0 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
187d0 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e  .    iGen = db->
187e0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
187f0 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f  hema->iGeneratio
18800 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  n;.  }else{.    
18810 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30  iGen = iMeta = 0
18820 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
18830 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
18840 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
18850 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  T32 );.  if( pOp
18860 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21 3d  ->p5 && (iMeta!=
18870 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21  pOp->p3 || iGen!
18880 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20  =pOp->p4.i) ){. 
18890 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
188a0 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
188b0 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
188c0 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44   = sqlite3DbStrD
188d0 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65  up(db, "database
188e0 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
188f0 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66  ged");.    /* If
18900 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   the schema-cook
18910 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ie from the data
18920 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65  base file matche
18930 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20  s the cookie .  
18940 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68    ** stored with
18950 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72   the in-memory r
18960 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
18970 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a   the schema, do.
18980 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61      ** not reloa
18990 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f  d the schema fro
189a0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
189b0 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ile..    **.    
189c0 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61  ** If virtual-ta
189d0 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c  bles are in use,
189e0 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73   this is not jus
189f0 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  t an optimizatio
18a00 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c  n..    ** Often,
18a10 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20   v-tables store 
18a20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74  their data in ot
18a30 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65  her SQLite table
18a40 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20  s, which.    ** 
18a50 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d  are queried from
18a60 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20   within xNext() 
18a70 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c  and other v-tabl
18a80 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a  e methods using.
18a90 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20      ** prepared 
18aa0 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68  queries. If such
18ab0 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d   a query is out-
18ac0 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e  of-date, we do n
18ad0 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a  ot want to.    *
18ae0 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61  * discard the da
18af0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61  tabase schema, a
18b00 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20  s the user code 
18b10 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65  implementing the
18b20 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20  .    ** v-table 
18b30 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65  would have to be
18b40 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73   ready for the s
18b50 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
18b60 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20  cture itself.   
18b70 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69   ** to be invali
18b80 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73  dated whenever s
18b90 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73  qlite3_step() is
18ba0 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
18bb0 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d  hin .    ** a v-
18bc0 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20  table method..  
18bd0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d    */.    if( db-
18be0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
18bf0 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
18c00 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20  okie!=iMeta ){. 
18c10 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
18c20 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70  tOneSchema(db, p
18c30 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20  Op->p1);.    }. 
18c40 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
18c50 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
18c60 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20  TE_SCHEMA;.  }. 
18c70 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
18c80 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65  code: ReadCookie
18c90 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
18ca0 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20  .** Read cookie 
18cb0 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64  number P3 from d
18cc0 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77  atabase P1 and w
18cd0 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67  rite it into reg
18ce0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d  ister P2..** P3=
18cf0 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
18d00 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32   version.  P3==2
18d10 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
18d20 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d   format..** P3==
18d30 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  3 is the recomme
18d40 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
18d50 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
18d60 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a  rth.  P1==0 is.*
18d70 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
18d80 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
18d90 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =1 is the databa
18da0 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
18db0 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61  store.** tempora
18dc0 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
18dd0 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   There must be a
18de0 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68   read-lock on th
18df0 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68  e database (eith
18e00 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  er a transaction
18e10 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72  .** must be star
18e20 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73  ted or there mus
18e30 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72  t be an open cur
18e40 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65  sor) before.** e
18e50 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e  xecuting this in
18e60 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
18e70 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  se OP_ReadCookie
18e80 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
18e90 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
18ea0 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  ease */.  int iM
18eb0 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  eta;.  int iDb;.
18ec0 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a    int iCookie;..
18ed0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
18ee0 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20  Reader );.  iDb 
18ef0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f  = pOp->p1;.  iCo
18f00 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  okie = pOp->p3;.
18f10 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
18f20 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  3<SQLITE_N_BTREE
18f30 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
18f40 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
18f50 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
18f60 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44  sert( db->aDb[iD
18f70 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b].pBt!=0 );.  a
18f80 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
18f90 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
18fa0 69 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74  iDb) );..  sqlit
18fb0 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64  e3BtreeGetMeta(d
18fc0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
18fd0 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a   iCookie, (u32 *
18fe0 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74  )&iMeta);.  pOut
18ff0 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20  ->u.i = iMeta;. 
19000 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
19010 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20  code: SetCookie 
19020 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
19030 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e  ** Write the con
19040 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
19050 20 50 33 20 28 69 6e 74 65 72 70 72 65 74 65 64   P3 (interpreted
19060 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a   as an integer).
19070 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e  ** into cookie n
19080 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61  umber P2 of data
19090 62 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31 20  base P1.  P2==1 
190a0 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
190b0 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d  rsion.  .** P2==
190c0 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
190d0 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20  e format. P2==3 
190e0 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64  is the recommend
190f0 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a  ed pager cache .
19100 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  ** size, and so 
19110 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
19120 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
19130 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
19140 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74  1 is the .** dat
19150 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
19160 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61  to store tempora
19170 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
19180 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d   A transaction m
19190 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
191a0 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20  efore executing 
191b0 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
191c0 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69  case OP_SetCooki
191d0 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  e: {       /* in
191e0 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a  3 */.  Db *pDb;.
191f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
19200 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  2<SQLITE_N_BTREE
19210 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
19220 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
19230 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
19240 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
19250 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
19260 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
19270 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
19280 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
19290 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
192a0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
192b0 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
192c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
192d0 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
192e0 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  eld(db, pOp->p1,
192f0 20 30 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20   0) );.  pIn3 = 
19300 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
19310 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
19320 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33 29  Integerify(pIn3)
19330 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20  ;.  /* See note 
19340 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66  about index shif
19350 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43  ting on OP_ReadC
19360 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20  ookie */.  rc = 
19370 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61  sqlite3BtreeUpda
19380 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c  teMeta(pDb->pBt,
19390 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70   pOp->p2, (int)p
193a0 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28  In3->u.i);.  if(
193b0 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f   pOp->p2==BTREE_
193c0 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29  SCHEMA_VERSION )
193d0 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68  {.    /* When th
193e0 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
193f0 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20  changes, record 
19400 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69  the new cookie i
19410 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20  nternally */.   
19420 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73   pDb->pSchema->s
19430 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28  chema_cookie = (
19440 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  int)pIn3->u.i;. 
19450 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
19460 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
19470 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66  nges;.  }else if
19480 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
19490 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a  _FILE_FORMAT ){.
194a0 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68      /* Record ch
194b0 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c  anges in the fil
194c0 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20  e format */.    
194d0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
194e0 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38 29  le_format = (u8)
194f0 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20  pIn3->u.i;.  }. 
19500 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20   if( pOp->p1==1 
19510 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69  ){.    /* Invali
19520 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65  date all prepare
19530 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65  d statements whe
19540 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20 64  never the TEMP d
19550 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73  atabase.    ** s
19560 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64  chema is changed
19570 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34 20  .  Ticket #1644 
19580 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78  */.    sqlite3Ex
19590 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
195a0 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
195b0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a  p->expired = 0;.
195c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
195d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52  /* Opcode: OpenR
195e0 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ead P1 P2 P3 P4 
195f0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
19600 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
19610 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
19620 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72  -only cursor for
19630 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
19640 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  ble whose root p
19650 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20  age is.** P2 in 
19660 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  a database file.
19670 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66    The database f
19680 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ile is determine
19690 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d  d by P3. .** P3=
196a0 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69  =0 means the mai
196b0 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d  n database, P3==
196c0 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61  1 means the data
196d0 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a  base used for .*
196e0 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
196f0 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61  es, and P3>1 mea
19700 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72  ns used the corr
19710 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68  esponding attach
19720 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  ed.** database. 
19730 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75   Give the new cu
19740 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69  rsor an identifi
19750 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50  er of P1.  The P
19760 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64  1.** values need
19770 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f   not be contiguo
19780 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61  us but all P1 va
19790 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73  lues should be s
197a0 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a  mall integers..*
197b0 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  * It is an error
197c0 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65   for P1 to be ne
197d0 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  gative..**.** If
197e0 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20   P5!=0 then use 
197f0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
19800 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68  egister P2 as th
19810 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74  e root page, not
19820 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
19830 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a   P2 itself..**.*
19840 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20  * There will be 
19850 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74  a read lock on t
19860 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e  he database when
19870 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e  ever there is an
19880 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e  .** open cursor.
19890 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73    If the databas
198a0 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70  e was unlocked p
198b0 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73  rior to this ins
198c0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e  truction.** then
198d0 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20   a read lock is 
198e0 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74  acquired as part
198f0 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   of this instruc
19900 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a  tion.  A read.**
19910 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68   lock allows oth
19920 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20  er processes to 
19930 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
19940 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a  e but prohibits.
19950 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f  ** any other pro
19960 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79  cess from modify
19970 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
19980 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b  .  The read lock
19990 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20   is.** released 
199a0 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73  when all cursors
199b0 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66   are closed.  If
199c0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
199d0 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f  n attempts.** to
199e0 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b   get a read lock
199f0 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20   but fails, the 
19a00 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65  script terminate
19a10 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c  s with an.** SQL
19a20 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63  ITE_BUSY error c
19a30 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ode..**.** The P
19a40 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
19a50 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
19a60 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
19a70 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
19a80 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
19a90 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
19aa0 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
19ab0 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
19ac0 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
19ad0 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
19ae0 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
19af0 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
19b00 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
19b10 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
19b20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
19b30 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
19b40 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
19b50 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
19b60 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
19b70 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
19b80 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  e table..**.** S
19b90 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69  ee also: OpenWri
19ba0 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f  te, ReopenIdx.*/
19bb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70  ./* Opcode: Reop
19bc0 65 6e 49 64 78 20 50 31 20 50 32 20 50 33 20 50  enIdx P1 P2 P3 P
19bd0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
19be0 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
19bf0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65  .**.** The Reope
19c00 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b  nIdx opcode work
19c10 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 52  s exactly like R
19c20 65 61 64 4f 70 65 6e 20 65 78 63 65 70 74 20 74  eadOpen except t
19c30 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20  hat it first.** 
19c40 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
19c50 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50   the cursor on P
19c60 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  1 is already ope
19c70 6e 20 77 69 74 68 20 61 20 72 6f 6f 74 20 70 61  n with a root pa
19c80 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  ge.** number of 
19c90 50 32 20 61 6e 64 20 69 66 20 69 74 20 69 73 20  P2 and if it is 
19ca0 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f  this opcode beco
19cb0 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e  mes a no-op.  In
19cc0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a   other words,.**
19cd0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   if the cursor i
19ce0 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20  s already open, 
19cf0 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74  do not reopen it
19d00 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70  ..**.** The Reop
19d10 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79  enIdx opcode may
19d20 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69   only be used wi
19d30 74 68 20 50 35 3d 3d 30 20 61 6e 64 20 77 69 74  th P5==0 and wit
19d40 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20  h P4 being.** a 
19d50 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63  P4_KEYINFO objec
19d60 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c  t.  Furthermore,
19d70 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75   the P3 value mu
19d80 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
19d90 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68 65 72  s.** every other
19da0 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70   ReopenIdx or Op
19db0 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65 20 73  enRead for the s
19dc0 61 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ame cursor numbe
19dd0 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65  r..**.** See the
19de0 20 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f 64 65   OpenRead opcode
19df0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
19e00 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
19e10 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
19e20 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69   Opcode: OpenWri
19e30 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
19e40 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
19e50 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
19e60 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f  .** Open a read/
19e70 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d  write cursor nam
19e80 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62  ed P1 on the tab
19e90 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
19ea0 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69  e root.** page i
19eb0 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21  s P2.  Or if P5!
19ec0 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  =0 use the conte
19ed0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
19ee0 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a  2 to find the.**
19ef0 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a   root page..**.*
19f00 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
19f10 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
19f20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
19f30 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
19f40 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
19f50 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
19f60 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
19f70 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
19f80 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
19f90 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
19fa0 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
19fb0 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
19fc0 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
19fd0 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
19fe0 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
19ff0 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
1a000 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
1a010 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
1a020 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
1a030 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1a040 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20  s in the table, 
1a050 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72  or to the.** lar
1a060 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e  gest index of an
1a070 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  y column of the 
1a080 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 61 63  table that is ac
1a090 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a  tually used..**.
1a0a0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1a0b0 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ion works just l
1a0c0 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63  ike OpenRead exc
1a0d0 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1a0e0 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20  s the cursor.** 
1a0f0 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f  in read/write mo
1a100 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e  de.  For a given
1a110 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61   table, there ca
1a120 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  n be one or more
1a130 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75   read-only.** cu
1a140 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c  rsors or a singl
1a150 65 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72  e read/write cur
1a160 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68  sor but not both
1a170 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1a180 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61   OpenRead..*/.ca
1a190 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a  se OP_ReopenIdx:
1a1a0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1a1b0 2a 70 43 75 72 3b 0a 0a 20 20 61 73 73 65 72 74  *pCur;..  assert
1a1c0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
1a1d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1a1e0 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1a1f0 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  O );.  pCur = p-
1a200 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1a210 0a 20 20 69 66 28 20 70 43 75 72 20 26 26 20 70  .  if( pCur && p
1a220 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28  Cur->pgnoRoot==(
1a230 75 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20  u32)pOp->p2 ){. 
1a240 20 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d     assert( pCur-
1a250 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b  >iDb==pOp->p3 );
1a260 20 20 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74        /* Guarant
1a270 65 65 64 20 62 79 20 74 68 65 20 63 6f 64 65 20  eed by the code 
1a280 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20  generator */.   
1a290 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 2f 2a   break;.  }.  /*
1a2a0 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   If the cursor i
1a2b0 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1a2c0 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20  open or is open 
1a2d0 6f 6e 20 61 20 64 69 66 66 65 72 65 6e 74 0a 20  on a different. 
1a2e0 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e 20   ** index, then 
1a2f0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  fall through int
1a300 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f  o OP_OpenRead to
1a310 20 66 6f 72 63 65 20 61 20 72 65 6f 70 65 6e 20   force a reopen 
1a320 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 4f 70 65  */.}.case OP_Ope
1a330 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f  nRead:.case OP_O
1a340 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e  penWrite: {.  in
1a350 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49  t nField;.  KeyI
1a360 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
1a370 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69   int p2;.  int i
1a380 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67  Db;.  int wrFlag
1a390 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20  ;.  Btree *pX;. 
1a3a0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
1a3b0 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20  r;.  Db *pDb;.. 
1a3c0 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
1a3d0 35 26 28 4f 50 46 4c 41 47 5f 50 32 49 53 52 45  5&(OPFLAG_P2ISRE
1a3e0 47 7c 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  G|OPFLAG_BULKCSR
1a3f0 29 29 3d 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a 20  ))==pOp->p5 );. 
1a400 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
1a410 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69  code==OP_OpenWri
1a420 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30  te || pOp->p5==0
1a430 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1a440 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
1a450 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
1a460 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64  ode==OP_OpenRead
1a470 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
1a480 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20  =OP_ReopenIdx.  
1a490 20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65          || p->re
1a4a0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20  adOnly==0 );..  
1a4b0 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29  if( p->expired )
1a4c0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
1a4d0 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65  E_ABORT;.    bre
1a4e0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c  ak;.  }..  nFiel
1a4f0 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66  d = 0;.  pKeyInf
1a500 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f  o = 0;.  p2 = pO
1a510 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70  p->p2;.  iDb = p
1a520 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
1a530 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
1a540 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1a550 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1a560 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
1a570 62 29 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  b) );.  pDb = &d
1a580 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70  b->aDb[iDb];.  p
1a590 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  X = pDb->pBt;.  
1a5a0 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b  assert( pX!=0 );
1a5b0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1a5c0 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65  de==OP_OpenWrite
1a5d0 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d   ){.    wrFlag =
1a5e0 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   1;.    assert( 
1a5f0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
1a600 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20  exHeld(db, iDb, 
1a610 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44  0) );.    if( pD
1a620 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
1a630 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e  _format < p->min
1a640 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1a650 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57  ){.      p->minW
1a660 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d  riteFileFormat =
1a670 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1a680 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20  ile_format;.    
1a690 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77  }.  }else{.    w
1a6a0 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20  rFlag = 0;.  }. 
1a6b0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
1a6c0 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b  PFLAG_P2ISREG ){
1a6d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
1a6e0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
1a6f0 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d   p2<=(p->nMem-p-
1a700 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
1a710 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32   pIn2 = &aMem[p2
1a720 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ];.    assert( m
1a730 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20  emIsValid(pIn2) 
1a740 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
1a750 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
1a760 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20  M_Int)!=0 );.   
1a770 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
1a780 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
1a790 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70  .    p2 = (int)p
1a7a0 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a  In2->u.i;.    /*
1a7b0 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c   The p2 value al
1a7c0 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20  ways comes from 
1a7d0 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74  a prior OP_Creat
1a7e0 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e  eTable opcode an
1a7f0 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70  d.    ** that op
1a800 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
1a810 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75   set the p2 valu
1a820 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f  e to 2 or more o
1a830 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20  r else fail..   
1a840 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72   ** If there wer
1a850 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65  e a failure, the
1a860 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
1a870 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68  ent would have h
1a880 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66  alted.    ** bef
1a890 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69  ore reaching thi
1a8a0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a  s instruction. *
1a8b0 2f 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52 28  /.    if( NEVER(
1a8c0 70 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20 20  p2<2) ) {.      
1a8d0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
1a8e0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
1a8f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1a900 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
1a910 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34   }.  if( pOp->p4
1a920 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1a930 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f   ){.    pKeyInfo
1a940 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1a950 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28  nfo;.    assert(
1a960 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1a970 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61  ENC(db) );.    a
1a980 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1a990 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e  >db==db );.    n
1a9a0 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f  Field = pKeyInfo
1a9b0 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66  ->nField+pKeyInf
1a9c0 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65  o->nXField;.  }e
1a9d0 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  lse if( pOp->p4t
1a9e0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b  ype==P4_INT32 ){
1a9f0 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
1aa00 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61  p->p4.i;.  }.  a
1aa10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1aa20 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  0 );.  assert( n
1aa30 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65  Field>=0 );.  te
1aa40 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d  stcase( nField==
1aa50 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77  0 );  /* Table w
1aa60 69 74 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d  ith INTEGER PRIM
1aa70 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68  ARY KEY and noth
1aa80 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43  ing else */.  pC
1aa90 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
1aaa0 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1aab0 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b  nField, iDb, 1);
1aac0 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29  .  if( pCur==0 )
1aad0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1aae0 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
1aaf0 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64  1;.  pCur->isOrd
1ab00 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72  ered = 1;.  pCur
1ab10 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b  ->pgnoRoot = p2;
1ab20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1ab30 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70  treeCursor(pX, p
1ab40 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49  2, wrFlag, pKeyI
1ab50 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73  nfo, pCur->pCurs
1ab60 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65  or);.  pCur->pKe
1ab70 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
1ab80 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
1ab90 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45  AG_BULKCSR==BTRE
1aba0 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20  E_BULKLOAD );.  
1abb0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1abc0 6f 72 48 69 6e 74 73 28 70 43 75 72 2d 3e 70 43  orHints(pCur->pC
1abd0 75 72 73 6f 72 2c 20 28 70 4f 70 2d 3e 70 35 20  ursor, (pOp->p5 
1abe0 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  & OPFLAG_BULKCSR
1abf0 29 29 3b 0a 0a 20 20 2f 2a 20 53 65 74 20 74 68  ));..  /* Set th
1ac00 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54  e VdbeCursor.isT
1ac10 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50  able variable. P
1ac20 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73  revious versions
1ac30 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20   of.  ** SQLite 
1ac40 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66  used to check if
1ac50 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66   the root-page f
1ac60 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61  lags were sane a
1ac70 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a  t this point.  *
1ac80 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74  * and report dat
1ac90 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e  abase corruption
1aca0 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f   if they were no
1acb0 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63  t, but this chec
1acc0 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65  k has.  ** since
1acd0 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
1ace0 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f  btree layer.  */
1acf0 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62    .  pCur->isTab
1ad00 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65  le = pOp->p4type
1ad10 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20  !=P4_KEYINFO;.  
1ad20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1ad30 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72  ode: OpenEphemer
1ad40 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  al P1 P2 * P4 P5
1ad50 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43  .** Synopsis: nC
1ad60 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f  olumn=P2.**.** O
1ad70 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
1ad80 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65   P1 to a transie
1ad90 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  nt table..** The
1ada0 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79   cursor is alway
1adb0 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72  s opened read/wr
1adc0 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20  ite even if .** 
1add0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1ade0 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20  e is read-only. 
1adf0 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a   The ephemeral.*
1ae00 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74  * table is delet
1ae10 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
1ae20 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   when the cursor
1ae30 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a   is closed..**.*
1ae40 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
1ae50 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1ae60 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74   the ephemeral t
1ae70 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
1ae80 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  sor points to a 
1ae90 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50  BTree table if P
1aea0 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54  4==0 and to a BT
1aeb0 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20  ree index.** if 
1aec0 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66  P4 is not 0.  If
1aed0 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
1aee0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   it points to a 
1aef0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1af00 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65  e.** that define
1af10 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  s the format of 
1af20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65  keys in the inde
1af30 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  x..**.** The P5 
1af40 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65  parameter can be
1af50 20 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42   a mask of the B
1af60 54 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66  TREE_* flags def
1af70 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65  ined.** in btree
1af80 2e 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73  .h.  These flags
1af90 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73   control aspects
1afa0 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f   of the operatio
1afb0 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65  n of.** the btre
1afc0 65 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d  e.  The BTREE_OM
1afd0 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42  IT_JOURNAL and B
1afe0 54 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67  TREE_SINGLE flag
1aff0 73 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61  s are.** added a
1b000 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f  utomatically..*/
1b010 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1b020 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20  Autoindex P1 P2 
1b030 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
1b040 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a  is: nColumn=P2.*
1b050 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1b060 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20   works the same 
1b070 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  as OP_OpenEpheme
1b080 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a  ral.  It has a.*
1b090 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65  * different name
1b0a0 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20   to distinguish 
1b0b0 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73  its use.  Tables
1b0c0 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a   created using.*
1b0d0 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  * by this opcode
1b0e0 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f   will be used fo
1b0f0 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  r automatically 
1b100 63 72 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e  created transien
1b110 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20  t.** indices in 
1b120 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  joins..*/.case O
1b130 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a  P_OpenAutoindex:
1b140 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70   .case OP_OpenEp
1b150 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62  hemeral: {.  Vdb
1b160 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20  eCursor *pCx;.  
1b170 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1b180 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  o;..  static con
1b190 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20  st int vfsFlags 
1b1a0 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  = .      SQLITE_
1b1b0 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c  OPEN_READWRITE |
1b1c0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1b1d0 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20  EN_CREATE |.    
1b1e0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58    SQLITE_OPEN_EX
1b1f0 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20  CLUSIVE |.      
1b200 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45  SQLITE_OPEN_DELE
1b210 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20  TEONCLOSE |.    
1b220 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52    SQLITE_OPEN_TR
1b230 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73  ANSIENT_DB;.  as
1b240 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1b250 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1b260 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p2>=0 );.  pC
1b270 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1b280 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1b290 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a  Op->p2, -1, 1);.
1b2a0 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1b2b0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1b2c0 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1b2d0 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72    pCx->isEphemer
1b2e0 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73  al = 1;.  rc = s
1b2f0 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28  qlite3BtreeOpen(
1b300 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c  db->pVfs, 0, db,
1b310 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20   &pCx->pBt, .   
1b320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b330 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f       BTREE_OMIT_
1b340 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f  JOURNAL | BTREE_
1b350 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35  SINGLE | pOp->p5
1b360 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69  , vfsFlags);.  i
1b370 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1b380 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
1b390 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
1b3a0 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29  ans(pCx->pBt, 1)
1b3b0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d  ;.  }.  if( rc==
1b3c0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1b3d0 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65   /* If a transie
1b3e0 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75  nt index is requ
1b3f0 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20  ired, create it 
1b400 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a  by calling.    *
1b410 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  * sqlite3BtreeCr
1b420 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68  eateTable() with
1b430 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b   the BTREE_BLOBK
1b440 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20  EY flag before. 
1b450 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74     ** opening it
1b460 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  . If a transient
1b470 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72   table is requir
1b480 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65  ed, just use the
1b490 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69  .    ** automati
1b4a0 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61  cally created ta
1b4b0 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61  ble with root-pa
1b4c0 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e  ge 1 (an BLOB_IN
1b4d0 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20  TKEY table)..   
1b4e0 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65   */.    if( (pKe
1b4f0 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1b500 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a  pKeyInfo)!=0 ){.
1b510 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a        int pgno;.
1b520 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1b530 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1b540 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72  YINFO );.      r
1b550 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1b560 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d  CreateTable(pCx-
1b570 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52  >pBt, &pgno, BTR
1b580 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70  EE_BLOBKEY | pOp
1b590 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66  ->p5); .      if
1b5a0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1b5b0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1b5c0 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f  t( pgno==MASTER_
1b5d0 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20  ROOT+1 );.      
1b5e0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1b5f0 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1b600 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b        assert( pK
1b610 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1b620 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20  (db) );.        
1b630 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1b640 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
1b650 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1b660 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1b670 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 70 4b 65  Bt, pgno, 1, pKe
1b680 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70 43 75 72  yInfo, pCx->pCur
1b690 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  sor);.      }.  
1b6a0 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1b6b0 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1b6c0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1b6d0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1b6e0 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f  Cx->pBt, MASTER_
1b6f0 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d  ROOT, 1, 0, pCx-
1b700 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1b710 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1b720 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  1;.    }.  }.  p
1b730 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  Cx->isOrdered = 
1b740 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f  (pOp->p5!=BTREE_
1b750 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72  UNORDERED);.  br
1b760 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1b770 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31  e: SorterOpen P1
1b780 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
1b790 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1b7a0 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e  rks like OP_Open
1b7b0 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74  Ephemeral except
1b7c0 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a   that it opens.*
1b7d0 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  * a transient in
1b7e0 64 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63  dex that is spec
1b7f0 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65  ifically designe
1b800 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a  d to sort large.
1b810 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20  ** tables using 
1b820 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67  an external merg
1b830 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d  e-sort algorithm
1b840 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d  ..**.** If argum
1b850 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65  ent P3 is non-ze
1b860 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e 64 69  ro, then it indi
1b870 63 61 74 65 73 20 74 68 61 74 20 74 68 65 20 73  cates that the s
1b880 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73  orter may.** ass
1b890 75 6d 65 20 74 68 61 74 20 61 20 73 74 61 62 6c  ume that a stabl
1b8a0 65 20 73 6f 72 74 20 63 6f 6e 73 69 64 65 72 69  e sort consideri
1b8b0 6e 67 20 74 68 65 20 66 69 72 73 74 20 50 33 20  ng the first P3 
1b8c0 66 69 65 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a  fields of each.*
1b8d0 2a 20 6b 65 79 20 69 73 20 73 75 66 66 69 63 69  * key is suffici
1b8e0 65 6e 74 20 74 6f 20 70 72 6f 64 75 63 65 20 74  ent to produce t
1b8f0 68 65 20 72 65 71 75 69 72 65 64 20 72 65 73 75  he required resu
1b900 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lts..*/.case OP_
1b910 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20  SorterOpen: {.  
1b920 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1b930 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1b940 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1b950 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29  rt( pOp->p2>=0 )
1b960 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1b970 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1b980 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1b990 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 1);.  if( pCx=
1b9a0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1b9b0 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  ;.  pCx->pKeyInf
1b9c0 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1b9d0 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
1b9e0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64  pCx->pKeyInfo->d
1b9f0 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72  b==db );.  asser
1ba00 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1ba10 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1ba20 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1ba30 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64  VdbeSorterInit(d
1ba40 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29  b, pOp->p3, pCx)
1ba50 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1ba60 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63   Opcode: Sequenc
1ba70 65 54 65 73 74 20 50 31 20 50 32 20 2a 20 2a 20  eTest P1 P2 * * 
1ba80 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
1ba90 66 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74  f( cursor[P1].ct
1baa0 72 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a  r++ ) pc = P2.**
1bab0 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74  .** P1 is a sort
1bac0 65 72 20 63 75 72 73 6f 72 2e 20 49 66 20 74 68  er cursor. If th
1bad0 65 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6e 74  e sequence count
1bae0 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  er is currently 
1baf0 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f  zero, jump.** to
1bb00 20 50 32 2e 20 52 65 67 61 72 64 6c 65 73 73 20   P2. Regardless 
1bb10 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
1bb20 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
1bb30 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74  ken, increment t
1bb40 68 65 0a 2a 2a 20 74 68 65 20 73 65 71 75 65 6e  he.** the sequen
1bb50 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73  ce value..*/.cas
1bb60 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 54 65 73  e OP_SequenceTes
1bb70 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  t: {.  VdbeCurso
1bb80 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28  r *pC;.  assert(
1bb90 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1bba0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1bbb0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1bbc0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1bbd0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 53 6f   assert( pC->pSo
1bbe0 72 74 65 72 20 29 3b 0a 20 20 69 66 28 20 28 70  rter );.  if( (p
1bbf0 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d  C->seqCount++)==
1bc00 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
1bc10 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
1bc20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1bc30 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f  code: OpenPseudo
1bc40 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1bc50 20 53 79 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f   Synopsis: P3 co
1bc60 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a  lumns in r[P2].*
1bc70 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
1bc80 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e  cursor that poin
1bc90 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62  ts to a fake tab
1bca0 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
1bcb0 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77   a single.** row
1bcc0 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63   of data.  The c
1bcd0 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f  ontent of that o
1bce0 6e 65 20 72 6f 77 20 69 73 20 74 68 65 20 63 6f  ne row is the co
1bcf0 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a  ntent of memory.
1bd00 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  ** register P2. 
1bd10 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1bd20 20 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d   cursor P1 becom
1bd30 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  es an alias for 
1bd40 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62  the .** MEM_Blob
1bd50 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e   content contain
1bd60 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
1bd70 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64  2..**.** A pseud
1bd80 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20  o-table created 
1bd90 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
1bda0 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61  s used to hold a
1bdb0 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f   single.** row o
1bdc0 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73  utput from the s
1bdd0 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68  orter so that th
1bde0 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63  e row can be dec
1bdf0 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20  omposed into.** 
1be00 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d  individual colum
1be10 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f  ns using the OP_
1be20 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20  Column opcode.  
1be30 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  The OP_Column op
1be40 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f  code.** is the o
1be50 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64  nly cursor opcod
1be60 65 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74  e that works wit
1be70 68 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  h a pseudo-table
1be80 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68  ..**.** P3 is th
1be90 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  e number of fiel
1bea0 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
1beb0 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73  s that will be s
1bec0 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  tored by.** the 
1bed0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
1bee0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65  .case OP_OpenPse
1bef0 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  udo: {.  VdbeCur
1bf00 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73  sor *pCx;..  ass
1bf10 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1bf20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1bf30 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p3>=0 );.  pCx
1bf40 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1bf50 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1bf60 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20  p->p3, -1, 0);. 
1bf70 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1bf80 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1bf90 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1bfa0 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c   pCx->pseudoTabl
1bfb0 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  eReg = pOp->p2;.
1bfc0 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1bfd0 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   1;.  assert( pO
1bfe0 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72  p->p5==0 );.  br
1bff0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c000 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20  e: Close P1 * * 
1c010 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20  * *.**.** Close 
1c020 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75  a cursor previou
1c030 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31  sly opened as P1
1c040 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a  .  If P1 is not.
1c050 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ** currently ope
1c060 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  n, this instruct
1c070 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ion is a no-op..
1c080 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65  */.case OP_Close
1c090 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
1c0a0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1c0b0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1c0c0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46  ;.  sqlite3VdbeF
1c0d0 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e  reeCursor(p, p->
1c0e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b  apCsr[pOp->p1]);
1c0f0 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  .  p->apCsr[pOp-
1c100 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61  >p1] = 0;.  brea
1c110 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1c120 20 53 65 65 6b 47 45 20 50 31 20 50 32 20 50 33   SeekGE P1 P2 P3
1c130 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1c140 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1c150 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1c160 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1c170 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1c180 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1c190 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1c1a0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1c1b0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74  register P3 as t
1c1c0 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73  he key.  If curs
1c1d0 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1c1e0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1c1f0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1c200 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1c210 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1c220 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1c230 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1c240 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1c250 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1c260 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1c270 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1c280 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1c290 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1c2a0 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
1c2b0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1c2c0 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1c2d0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1c2e0 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e  .** greater than
1c2f0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1c300 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1c310 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1c320 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1c330 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1c340 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1c350 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1c360 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
1c370 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
1c380 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20  eginning toward 
1c390 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68  the end.  In oth
1c3a0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1c3b0 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1c3c0 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78  gured to use Nex
1c3d0 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a  t, not Prev..**.
1c3e0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1c3f0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1c400 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  ekLt, SeekGt, Se
1c410 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1c420 65 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32 20  e: SeekGT P1 P2 
1c430 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1c440 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1c450 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1c460 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1c470 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1c480 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1c490 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1c4a0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1c4b0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1c4c0 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1c4d0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1c4e0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1c4f0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1c500 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1c510 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1c520 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1c530 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1c540 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1c550 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1c560 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1c570 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1c580 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74  the smallest ent
1c590 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67  ry that .** is g
1c5a0 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
1c5b0 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1c5c0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1c5d0 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ds greater than 
1c5e0 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
1c5f0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1c600 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1c610 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1c620 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1c630 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1c640 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61  to move in forwa
1c650 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  rd order,.** fro
1c660 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
1c670 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20  toward the end. 
1c680 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1c690 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1c6a0 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1c6b0 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72  use Next, not Pr
1c6c0 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ev..**.** See al
1c6d0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1c6e0 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65  und, SeekLt, See
1c6f0 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGe, SeekLe.*/./
1c700 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 54  * Opcode: SeekLT
1c710 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a   P1 P2 P3 P4 * .
1c720 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1c730 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1c740 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1c750 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1c760 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1c770 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1c780 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1c790 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1c7a0 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1c7b0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1c7c0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1c7d0 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1c7e0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1c7f0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1c800 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1c810 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1c820 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1c830 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1c840 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1c850 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1c860 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
1c870 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1c880 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
1c890 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1c8a0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1c8b0 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e  ecords less than
1c8c0 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1c8d0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1c8e0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1c8f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1c900 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1c910 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1c920 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65   to move in reve
1c930 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  rse order,.** fr
1c940 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72  om the end towar
1c950 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  d the beginning.
1c960 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1c970 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1c980 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1c990 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e   use Prev, not N
1c9a0 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ext..**.** See a
1c9b0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1c9c0 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65  ound, SeekGt, Se
1c9d0 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1c9e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1c9f0 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  E P1 P2 P3 P4 *.
1ca00 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1ca10 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1ca20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1ca30 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1ca40 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1ca50 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1ca60 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1ca70 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1ca80 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1ca90 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1caa0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1cab0 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1cac0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1cad0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1cae0 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1caf0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1cb00 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1cb10 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1cb20 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1cb30 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
1cb40 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1cb50 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1cb60 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  * is less than o
1cb70 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1cb80 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1cb90 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1cba0 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20  s .** less than 
1cbb0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1cbc0 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1cbd0 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1cbe0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1cbf0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1cc00 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1cc10 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1cc20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
1cc30 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e  ,.** from the en
1cc40 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67  d toward the beg
1cc50 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65  inning.  In othe
1cc60 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1cc70 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1cc80 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76  ured to use Prev
1cc90 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a  , not Next..**.*
1cca0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1ccb0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1ccc0 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
1ccd0 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  kLt.*/.case OP_S
1cce0 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20 20 2f  eekLT:         /
1ccf0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1cd00 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20  ase OP_SeekLE:  
1cd10 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1cd20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1cd30 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20 2f  eekGE:         /
1cd40 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1cd50 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b  ase OP_SeekGT: {
1cd60 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1cd70 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  in3 */.  int res
1cd80 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64  ;.  int oc;.  Vd
1cd90 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1cda0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
1cdb0 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  ;.  int nField;.
1cdc0 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20    i64 iKey;     
1cdd0 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65   /* The rowid we
1cde0 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20   are to seek to 
1cdf0 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
1ce00 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1ce10 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1ce20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1ce30 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d  >p2!=0 );.  pC =
1ce40 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1ce50 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1ce60 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1ce70 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1ce80 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
1ce90 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d  rt( OP_SeekLE ==
1cea0 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a   OP_SeekLT+1 );.
1ceb0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1cec0 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kGE == OP_SeekLT
1ced0 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +2 );.  assert( 
1cee0 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f  OP_SeekGT == OP_
1cef0 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73  SeekLT+3 );.  as
1cf00 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65  sert( pC->isOrde
1cf10 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  red );.  assert(
1cf20 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
1cf30 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f  );.  oc = pOp->o
1cf40 70 63 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e 75 6c  pcode;.  pC->nul
1cf50 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66  lRow = 0;.#ifdef
1cf60 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1cf70 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70  pC->seekOp = pOp
1cf80 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66  ->opcode;.#endif
1cf90 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62  .  if( pC->isTab
1cfa0 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  le ){.    /* The
1cfb0 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20   input value in 
1cfc0 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61  P3 might be of a
1cfd0 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72  ny type: integer
1cfe0 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a  , real, string,.
1cff0 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20      ** blob, or 
1d000 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65  NULL.  But it ne
1d010 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  eds to be an int
1d020 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63  eger before we c
1d030 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65  an do.    ** the
1d040 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72   seek, so conver
1d050 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e  t it. */.    pIn
1d060 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1d070 33 5d 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  3];.    if( (pIn
1d080 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  3->flags & (MEM_
1d090 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
1d0a0 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  _Str))==MEM_Str 
1d0b0 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75  ){.      applyNu
1d0c0 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
1d0d0 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  n3, 0);.    }.  
1d0e0 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33    iKey = sqlite3
1d0f0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
1d100 33 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  3);.    pC->rowi
1d110 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20  dIsValid = 0;.. 
1d120 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
1d130 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20  value could not 
1d140 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
1d150 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74  o an integer wit
1d160 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73  hout.    ** loss
1d170 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c   of information,
1d180 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72   then special pr
1d190 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75  ocessing is requ
1d1a0 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69  ired... */.    i
1d1b0 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1d1c0 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
1d1d0 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33  .      if( (pIn3
1d1e0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
1d1f0 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  al)==0 ){.      
1d200 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
1d210 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63  alue cannot be c
1d220 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
1d230 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62  y kind of a numb
1d240 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  er,.        ** t
1d250 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20  hen the seek is 
1d260 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f  not possible, so
1d270 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
1d280 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
1d290 3e 70 32 20 2d 20 31 3b 20 20 56 64 62 65 42 72  >p2 - 1;  VdbeBr
1d2a0 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a  anchTaken(1,2);.
1d2b0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1d2c0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
1d2d0 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d   If the approxim
1d2e0 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61  ation iKey is la
1d2f0 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63  rger than the ac
1d300 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68  tual real search
1d310 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20  .      ** term, 
1d320 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f  substitute >= fo
1d330 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d  r > and < for <=
1d340 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65  . e.g. if the se
1d350 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20  arch term.      
1d360 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68  ** is 4.9 and th
1d370 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78  e integer approx
1d380 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20  imation 5:.     
1d390 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   **.      **    
1d3a0 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20      (x >  4.9)  
1d3b0 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35    ->     (x >= 5
1d3c0 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  ).      **      
1d3d0 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20    (x <= 4.9)    
1d3e0 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a  ->     (x <  5).
1d3f0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
1d400 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f  f( pIn3->u.r<(do
1d410 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20  uble)iKey ){.   
1d420 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
1d430 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b  SeekGE==(OP_Seek
1d440 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20  GT-1) );.       
1d450 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1d460 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31  LT==(OP_SeekLE-1
1d470 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1d480 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20  ert( (OP_SeekLE 
1d490 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1d4a0 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20  eekGT & 0x0001) 
1d4b0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
1d4c0 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  oc & 0x0001)==(O
1d4d0 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30  P_SeekGT & 0x000
1d4e0 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20  1) ) oc--;.     
1d4f0 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
1d500 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  the approximatio
1d510 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65  n iKey is smalle
1d520 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61  r than the actua
1d530 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20  l real search.  
1d540 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62      ** term, sub
1d550 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c  stitute <= for <
1d560 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20   and > for >=.  
1d570 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66  */.      else if
1d580 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75  ( pIn3->u.r>(dou
1d590 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20  ble)iKey ){.    
1d5a0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
1d5b0 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c  eekLE==(OP_SeekL
1d5c0 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  T+1) );.        
1d5d0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1d5e0 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29  T==(OP_SeekGE+1)
1d5f0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1d600 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26  rt( (OP_SeekLT &
1d610 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1d620 65 6b 47 45 20 26 20 30 78 30 30 30 31 29 20 29  ekGE & 0x0001) )
1d630 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
1d640 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  c & 0x0001)==(OP
1d650 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31  _SeekLT & 0x0001
1d660 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20  ) ) oc++;.      
1d670 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20  }.    } .    rc 
1d680 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1d690 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1d6a0 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
1d6b0 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  4)iKey, 0, &res)
1d6c0 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
1d6d0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1d6e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d6f0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1d700 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29      if( res==0 )
1d710 7b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69  {.      pC->rowi
1d720 64 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20  dIsValid = 1;.  
1d730 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69      pC->lastRowi
1d740 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 7d 0a  d = iKey;.    }.
1d750 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 46 69    }else{.    nFi
1d760 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1d770 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
1d780 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1d790 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  32 );.    assert
1d7a0 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
1d7b0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1d7c0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1d7d0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
1d7e0 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a  )nField;..    /*
1d7f0 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f   The next line o
1d800 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20  f code computes 
1d810 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79  as follows, only
1d820 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20   faster:.    ** 
1d830 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65    if( oc==OP_See
1d840 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGT || oc==OP_Se
1d850 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20  ekLE ){.    **  
1d860 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
1d870 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d  = -1;.    **   }
1d880 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20  else{.    **    
1d890 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
1d8a0 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20  +1;.    **   }. 
1d8b0 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61     */.    r.defa
1d8c0 75 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28  ult_rc = ((1 & (
1d8d0 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29  oc - OP_SeekLT))
1d8e0 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20   ? -1 : +1);.   
1d8f0 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1d900 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61  SeekGT || r.defa
1d910 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20  ult_rc==-1 );.  
1d920 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1d930 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66  _SeekLE || r.def
1d940 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20  ault_rc==-1 );. 
1d950 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1d960 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65  P_SeekGE || r.de
1d970 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a  fault_rc==+1 );.
1d980 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1d990 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64  OP_SeekLT || r.d
1d9a0 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b  efault_rc==+1 );
1d9b0 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26  ..    r.aMem = &
1d9c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
1d9d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1d9e0 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20  UG.    { int i; 
1d9f0 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
1da00 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
1da10 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
1da20 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
1da30 6e 64 69 66 0a 20 20 20 20 45 78 70 61 6e 64 42  ndif.    ExpandB
1da40 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20  lob(r.aMem);.   
1da50 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1da60 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1da70 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1da80 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1da90 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1daa0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
1dab0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1dac0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  error;.    }.   
1dad0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1dae0 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d  d = 0;.  }.  pC-
1daf0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1db00 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
1db10 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1db20 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c  TALE;.#ifdef SQL
1db30 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
1db40 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
1db50 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  +;.#endif.  if( 
1db60 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b  oc>=OP_SeekGE ){
1db70 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
1db80 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGE || oc==O
1db90 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20 20 20  P_SeekGT );.    
1dba0 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65  if( res<0 || (re
1dbb0 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
1dbc0 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20 20 20  eekGT) ){.      
1dbd0 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  res = 0;.      r
1dbe0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1dbf0 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Next(pC->pCursor
1dc00 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
1dc10 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1dc20 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1dc30 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1dc40 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1dc50 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  id = 0;.    }els
1dc60 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  e{.      res = 0
1dc70 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1dc80 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d  .    assert( oc=
1dc90 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63  =OP_SeekLT || oc
1dca0 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20  ==OP_SeekLE );. 
1dcb0 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20     if( res>0 || 
1dcc0 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
1dcd0 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20  P_SeekLT) ){.   
1dce0 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
1dcf0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1dd00 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e  reePrevious(pC->
1dd10 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1dd20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1dd30 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1dd40 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1dd50 72 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  r;.      pC->row
1dd60 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1dd70 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1dd80 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20  /* res might be 
1dd90 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65  negative because
1dda0 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d   the table is em
1ddb0 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20  pty.  Check to. 
1ddc0 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74       ** see if t
1ddd0 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e  his is the case.
1dde0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1ddf0 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72  res = sqlite3Btr
1de00 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f  eeEof(pC->pCurso
1de10 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  r);.    }.  }.  
1de20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1de30 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  0 );.  VdbeBranc
1de40 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
1de50 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20  ;.  if( res ){. 
1de60 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1de70 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
1de80 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1de90 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a  Seek P1 P2 * * *
1dea0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
1deb0 6e 74 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a  ntkey=r[P2].**.*
1dec0 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20  * P1 is an open 
1ded0 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64  table cursor and
1dee0 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20 69   P2 is a rowid i
1def0 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65  nteger.  Arrange
1df00 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f  .** for P1 to mo
1df10 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  ve so that it po
1df20 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69  ints to the rowi
1df30 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a  d given by P2..*
1df40 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74  *.** This is act
1df50 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64  ually a deferred
1df60 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20   seek.  Nothing 
1df70 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73  actually happens
1df80 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75   until.** the cu
1df90 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20  rsor is used to 
1dfa0 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20  read a record.  
1dfb0 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20  That way, if no 
1dfc0 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20  reads.** occur, 
1dfd0 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49  no unnecessary I
1dfe0 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63  /O happens..*/.c
1dff0 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20  ase OP_Seek: {  
1e000 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
1e010 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
1e020 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1e030 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1e040 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1e050 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1e060 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1e070 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1e080 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1e090 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1e0a0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1e0b0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
1e0c0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
1e0d0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 2d  [pOp->p2];.  pC-
1e0e0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
1e0f0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
1e100 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 70 43 2d  lue(pIn2);.  pC-
1e110 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1e120 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  0;.  pC->deferre
1e130 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 62  dMoveto = 1;.  b
1e140 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f  reak;.}.  ../* O
1e150 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
1e160 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1e170 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1e180 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
1e190 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
1e1a0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1e1b0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1e1c0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
1e1d0 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
1e1e0 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
1e1f0 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
1e200 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
1e210 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
1e220 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75  record..**.** Cu
1e230 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1e240 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1e250 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1e260 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1e270 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65  d P4.** is a pre
1e280 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
1e290 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
1e2a0 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
1e2b0 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65   and.** P1 is le
1e2c0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1e2d0 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  he matching entr
1e2e0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  y..**.** This op
1e2f0 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74  eration leaves t
1e300 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
1e310 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
1e320 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  n be.** advanced
1e330 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20   in the forward 
1e340 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  direction.  The 
1e350 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
1e360 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62   will work,.** b
1e370 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20  ut not the Prev 
1e380 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
1e390 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
1e3a0 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
1e3b0 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65  t, NotExists. Se
1e3c0 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekGe.*/./* Opcod
1e3d0 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50  e: NotFound P1 P
1e3e0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1e3f0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1e400 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
1e410 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
1e420 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
1e430 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1e440 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
1e450 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
1e460 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
1e470 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
1e480 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
1e490 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
1e4a0 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
1e4b0 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1e4c0 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1e4d0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1e4e0 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1e4f0 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74  d P4.** is not t
1e500 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79  he prefix of any
1e510 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
1e520 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
1e530 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a   to P2.  If P1 .
1e540 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  ** does contain 
1e550 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70  an entry whose p
1e560 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68  refix matches th
1e570 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74  e P3/P4 record t
1e580 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66  hen control.** f
1e590 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20  alls through to 
1e5a0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
1e5b0 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c  tion and P1 is l
1e5c0 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
1e5d0 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20  the.** matching 
1e5e0 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  entry..**.** Thi
1e5f0 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76  s operation leav
1e600 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
1e610 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
1e620 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61  t cannot be.** a
1e630 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65  dvanced in eithe
1e640 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
1e650 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1e660 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a  e Next and Prev.
1e670 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f  ** opcodes do no
1e680 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69  t work after thi
1e690 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a  s operation..**.
1e6a0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1e6b0 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e  nd, NotExists, N
1e6c0 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20  oConflict.*/./* 
1e6d0 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69  Opcode: NoConfli
1e6e0 63 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ct P1 P2 P3 P4 *
1e6f0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1e700 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1e710 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1e720 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1e730 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1e740 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1e750 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1e760 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1e770 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1e780 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1e790 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1e7a0 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1e7b0 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
1e7c0 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
1e7d0 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
1e7e0 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
1e7f0 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63  y P3 and P4.** c
1e800 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c  ontains any NULL
1e810 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d   value, jump imm
1e820 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
1e830 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66   If all terms of
1e840 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61   the.** record a
1e850 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e  re not-NULL then
1e860 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65   a check is done
1e870 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
1e880 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a   any row in the.
1e890 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72 65  ** P1 index btre
1e8a0 65 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67  e has a matching
1e8b0 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49 66   key prefix.  If
1e8c0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61   there are no ma
1e8d0 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69  tches, jump.** i
1e8e0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1e8f0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61  .  If there is a
1e900 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72   match, fall thr
1e910 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74  ough and leave t
1e920 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20  he P1.** cursor 
1e930 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
1e940 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a  matching row..**
1e950 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1e960 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50  is similar to OP
1e970 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74  _NotFound with t
1e980 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68  he exceptions th
1e990 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  at the.** branch
1e9a0 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e   is always taken
1e9b0 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20   if any part of 
1e9c0 74 68 65 20 73 65 61 72 63 68 20 6b 65 79 20 69  the search key i
1e9d0 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  nput is NULL..**
1e9e0 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
1e9f0 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
1ea00 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
1ea10 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
1ea20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
1ea30 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
1ea40 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
1ea50 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
1ea60 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65  d Prev.** opcode
1ea70 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66  s do not work af
1ea80 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69  ter this operati
1ea90 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
1eaa0 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f  so: NotFound, Fo
1eab0 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a  und, NotExists.*
1eac0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66  /.case OP_NoConf
1ead0 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d  lict:     /* jum
1eae0 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1eaf0 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20  P_NotFound:     
1eb00 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1eb10 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a  /.case OP_Found:
1eb20 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1eb30 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
1eb40 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20  alreadyExists;. 
1eb50 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43   int ii;.  VdbeC
1eb60 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
1eb70 20 72 65 73 3b 0a 20 20 63 68 61 72 20 2a 70 46   res;.  char *pF
1eb80 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  ree;.  UnpackedR
1eb90 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a  ecord *pIdxKey;.
1eba0 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1ebb0 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70   r;.  char aTemp
1ebc0 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  Rec[ROUND8(sizeo
1ebd0 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  f(UnpackedRecord
1ebe0 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29  )) + sizeof(Mem)
1ebf0 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66  *4 + 7];..#ifdef
1ec00 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
1ec10 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  f( pOp->opcode!=
1ec20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20  OP_NoConflict ) 
1ec30 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f  sqlite3_found_co
1ec40 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20  unt++;.#endif.. 
1ec50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1ec60 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1ec70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1ec80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1ec90 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1eca0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1ecb0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1ecc0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
1ecd0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1ece0 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
1ecf0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e  pOp->opcode;.#en
1ed00 64 69 66 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  dif.  pIn3 = &aM
1ed10 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
1ed20 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1ed30 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
1ed40 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
1ed50 30 20 29 3b 0a 20 20 70 46 72 65 65 20 3d 20 30  0 );.  pFree = 0
1ed60 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
1ed70 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20  .  Only used to 
1ed80 73 75 70 70 72 65 73 73 20 61 20 63 6f 6d 70 69  suppress a compi
1ed90 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  ler warning. */.
1eda0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e    if( pOp->p4.i>
1edb0 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49  0 ){.    r.pKeyI
1edc0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
1edd0 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
1ede0 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
1edf0 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20  i;.    r.aMem = 
1ee00 70 49 6e 33 3b 0a 20 20 20 20 66 6f 72 28 69 69  pIn3;.    for(ii
1ee10 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b  =0; ii<r.nField;
1ee20 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73   ii++){.      as
1ee30 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1ee40 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b  (&r.aMem[ii]) );
1ee50 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  .      ExpandBlo
1ee60 62 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a  b(&r.aMem[ii]);.
1ee70 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1ee80 42 55 47 0a 20 20 20 20 20 20 69 66 28 20 69 69  BUG.      if( ii
1ee90 20 29 20 52 45 47 49 53 54 45 52 5f 54 52 41 43   ) REGISTER_TRAC
1eea0 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72  E(pOp->p3+ii, &r
1eeb0 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64  .aMem[ii]);.#end
1eec0 69 66 0a 20 20 20 20 7d 0a 20 20 20 20 70 49 64  if.    }.    pId
1eed0 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c  xKey = &r;.  }el
1eee0 73 65 7b 0a 20 20 20 20 70 49 64 78 4b 65 79 20  se{.    pIdxKey 
1eef0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c  = sqlite3VdbeAll
1ef00 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  ocUnpackedRecord
1ef10 28 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 4b  (.        pC->pK
1ef20 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63  eyInfo, aTempRec
1ef30 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65  , sizeof(aTempRe
1ef40 63 29 2c 20 26 70 46 72 65 65 0a 20 20 20 20 29  c), &pFree.    )
1ef50 3b 20 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b  ; .    if( pIdxK
1ef60 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ey==0 ) goto no_
1ef70 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  mem;.    assert(
1ef80 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
1ef90 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 61  EM_Blob );.    a
1efa0 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
1efb0 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d  ags & MEM_Zero)=
1efc0 3d 30 20 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c  =0 );  /* zerobl
1efd0 6f 62 73 20 61 6c 72 65 61 64 79 20 65 78 70 61  obs already expa
1efe0 6e 64 65 64 20 2a 2f 0a 20 20 20 20 73 71 6c 69  nded */.    sqli
1eff0 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70  te3VdbeRecordUnp
1f000 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  ack(pC->pKeyInfo
1f010 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d  , pIn3->n, pIn3-
1f020 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20  >z, pIdxKey);.  
1f030 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66  }.  pIdxKey->def
1f040 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 69  ault_rc = 0;.  i
1f050 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
1f060 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b  OP_NoConflict ){
1f070 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20  .    /* For the 
1f080 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70  OP_NoConflict op
1f090 63 6f 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a  code, take the j
1f0a0 75 6d 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68  ump if any of th
1f0b0 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66  e.    ** input f
1f0c0 69 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20  ields are NULL, 
1f0d0 73 69 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69  since any key wi
1f0e0 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e  th a NULL will n
1f0f0 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69  ot.    ** confli
1f100 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69  ct */.    for(ii
1f110 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b  =0; ii<r.nField;
1f120 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66   ii++){.      if
1f130 28 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61  ( r.aMem[ii].fla
1f140 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
1f150 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f  .        pc = pO
1f160 70 2d 3e 70 32 20 2d 20 31 3b 20 56 64 62 65 42  p->p2 - 1; VdbeB
1f170 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b  ranchTaken(1,2);
1f180 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
1f190 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1f1a0 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
1f1b0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1f1c0 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1f1d0 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20   pIdxKey, 0, 0, 
1f1e0 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70 4f 70  &res);.  if( pOp
1f1f0 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20  ->p4.i==0 ){.   
1f200 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
1f210 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 7d 0a 20  b, pFree);.  }. 
1f220 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1f230 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  OK ){.    break;
1f240 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52  .  }.  pC->seekR
1f250 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61  esult = res;.  a
1f260 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
1f270 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e  res==0);.  pC->n
1f280 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61  ullRow = 1-alrea
1f290 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e  dyExists;.  pC->
1f2a0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1f2b0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
1f2c0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1f2d0 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ALE;.  if( pOp->
1f2e0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
1f2f0 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
1f300 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45  chTaken(alreadyE
1f310 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
1f320 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73   if( alreadyExis
1f330 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  ts ) pc = pOp->p
1f340 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2 - 1;.  }else{.
1f350 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
1f360 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74  ken(alreadyExist
1f370 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s==0,2);.    if(
1f380 20 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20   !alreadyExists 
1f390 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d  ) pc = pOp->p2 -
1f3a0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
1f3b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
1f3c0 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50  otExists P1 P2 P
1f3d0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
1f3e0 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a  s: intkey=r[P3].
1f3f0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
1f400 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f  index of a curso
1f410 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c  r open on an SQL
1f420 20 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69   table btree (wi
1f430 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65  th integer.** ke
1f440 79 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69  ys).  P3 is an i
1f450 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49  nteger rowid.  I
1f460 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f  f P1 does not co
1f470 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77  ntain a record w
1f480 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20  ith.** rowid P3 
1f490 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
1f4a0 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
1f4b0 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e   P1 does contain
1f4c0 20 61 20 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74   a record.** wit
1f4d0 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  h rowid P3 then 
1f4e0 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72  leave the cursor
1f4f0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61   pointing at tha
1f500 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c  t record and fal
1f510 6c 0a 2a 2a 20 74 68 72 6f 75 67 68 20 74 6f 20  l.** through to 
1f520 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
1f530 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
1f540 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f  OP_NotFound opco
1f550 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20  de performs the 
1f560 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f  same operation o
1f570 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a  n index btrees.*
1f580 2a 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72  * (with arbitrar
1f590 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65  y multi-value ke
1f5a0 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ys)..**.** This 
1f5b0 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1f5c0 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
1f5d0 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
1f5e0 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a  not be advanced.
1f5f0 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72  ** in either dir
1f600 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  ection.  In othe
1f610 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78  r words, the Nex
1f620 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64  t and Prev opcod
1f630 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77  es will.** not w
1f640 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ork following th
1f650 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  is opcode..**.**
1f660 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1f670 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f  , NotFound, NoCo
1f680 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61 73 65 20 4f  nflict.*/.case O
1f690 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20  P_NotExists: {  
1f6a0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1f6b0 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n3 */.  VdbeCurs
1f6c0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
1f6d0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
1f6e0 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79   res;.  u64 iKey
1f6f0 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ;..  pIn3 = &aMe
1f700 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
1f710 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1f720 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
1f730 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1f740 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1f750 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1f760 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1f770 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1f780 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66   pC!=0 );.#ifdef
1f790 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1f7a0 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a  pC->seekOp = 0;.
1f7b0 23 65 6e 64 69 66 0a 20 20 61 73 73 65 72 74 28  #endif.  assert(
1f7c0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1f7d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
1f7e0 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
1f7f0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
1f800 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
1f810 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
1f820 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65    res = 0;.  iKe
1f830 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  y = pIn3->u.i;. 
1f840 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1f850 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1f860 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c  (pCrsr, 0, iKey,
1f870 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d   0, &res);.  pC-
1f880 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 49 6e  >lastRowid = pIn
1f890 33 2d 3e 75 2e 69 3b 0a 20 20 70 43 2d 3e 72 6f  3->u.i;.  pC->ro
1f8a0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73  widIsValid = res
1f8b0 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 70 43 2d 3e  ==0 ?1:0;.  pC->
1f8c0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70  nullRow = 0;.  p
1f8d0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1f8e0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1f8f0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1f900 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72  to = 0;.  VdbeBr
1f910 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
1f920 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 21 3d  ,2);.  if( res!=
1f930 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
1f940 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61  p->p2 - 1;.    a
1f950 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
1f960 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20  IsValid==0 );.  
1f970 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  }.  pC->seekResu
1f980 6c 74 20 3d 20 72 65 73 3b 0a 20 20 62 72 65 61  lt = res;.  brea
1f990 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1f9a0 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20   Sequence P1 P2 
1f9b0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
1f9c0 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b  s: r[P2]=cursor[
1f9d0 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20  P1].ctr++.**.** 
1f9e0 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76  Find the next av
1f9f0 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65  ailable sequence
1fa00 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73   number for curs
1fa10 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20  or P1..** Write 
1fa20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  the sequence num
1fa30 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ber into registe
1fa40 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71  r P2..** The seq
1fa50 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20  uence number on 
1fa60 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e  the cursor is in
1fa70 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20  cremented after 
1fa80 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74  this.** instruct
1fa90 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ion.  .*/.case O
1faa0 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20  P_Sequence: {   
1fab0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
1fac0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1fad0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1fae0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1faf0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1fb00 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
1fb10 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
1fb20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61  pOut->u.i = p->a
1fb30 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73  pCsr[pOp->p1]->s
1fb40 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65  eqCount++;.  bre
1fb50 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
1fb60 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50  e: NewRowid P1 P
1fb70 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
1fb80 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
1fb90 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65  d.**.** Get a ne
1fba0 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64  w integer record
1fbb0 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22   number (a.k.a "
1fbc0 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20  rowid") used as 
1fbd0 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62  the key to a tab
1fbe0 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72  le..** The recor
1fbf0 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20  d number is not 
1fc00 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20  previously used 
1fc10 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20  as a key in the 
1fc20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c  database.** tabl
1fc30 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  e that cursor P1
1fc40 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65   points to.  The
1fc50 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1fc60 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a  er is written.**
1fc70 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69   written to regi
1fc80 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
1fc90 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69  f P3>0 then P3 i
1fca0 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
1fcb0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
1fcc0 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74  f this VDBE that
1fcd0 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c   holds .** the l
1fce0 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c  argest previousl
1fcf0 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  y generated reco
1fd00 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65  rd number. No ne
1fd10 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73  w record numbers
1fd20 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20   are.** allowed 
1fd30 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
1fd40 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e  this value. When
1fd50 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63   this value reac
1fd60 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c  hes its maximum,
1fd70 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46   .** an SQLITE_F
1fd80 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e  ULL error is gen
1fd90 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72  erated. The P3 r
1fda0 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74  egister is updat
1fdb0 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a  ed with the '.**
1fdc0 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
1fdd0 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50  d number. This P
1fde0 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75  3 mechanism is u
1fdf0 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c  sed to help impl
1fe00 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54  ement the.** AUT
1fe10 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75  OINCREMENT featu
1fe20 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  re..*/.case OP_N
1fe30 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  ewRowid: {      
1fe40 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1fe50 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34  release */.  i64
1fe60 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   v;             
1fe70 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
1fe80 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  owid */.  VdbeCu
1fe90 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
1fea0 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61   /* Cursor of ta
1feb0 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e  ble to get the n
1fec0 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e  ew rowid */.  in
1fed0 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
1fee0 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
1fef0 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65  f an sqlite3Btre
1ff00 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74  eLast() */.  int
1ff10 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20   cnt;           
1ff20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74      /* Counter t
1ff30 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62  o limit the numb
1ff40 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a  er of searches *
1ff50 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
1ff60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1ff70 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c  gister holding l
1ff80 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72  argest rowid for
1ff90 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
1ffa0 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
1ffb0 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f  Frame;     /* Ro
1ffc0 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45  ot frame of VDBE
1ffd0 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20   */..  v = 0;.  
1ffe0 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
1fff0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
20000 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
20010 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
20020 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
20030 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
20040 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28   );.  if( NEVER(
20050 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20  pC->pCursor==0) 
20060 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65  ){.    /* The ze
20070 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ro initializatio
20080 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74  n above is all t
20090 68 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f  hat is needed */
200a0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
200b0 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20   The next rowid 
200c0 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  or record number
200d0 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d   (different term
200e0 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20  s for the same. 
200f0 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20     ** thing) is 
20100 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77  obtained in a tw
20110 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d  o-step algorithm
20120 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
20130 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74  First we attempt
20140 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72   to find the lar
20150 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
20160 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a  wid and add one.
20170 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20      ** to that. 
20180 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67   But if the larg
20190 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
201a0 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68  id is already th
201b0 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a  e maximum.    **
201c0 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
201d0 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61  r, we have to fa
201e0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
201f0 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20  e second.    ** 
20200 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c  probabilistic al
20210 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20  gorithm.    **. 
20220 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64     ** The second
20230 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f   algorithm is to
20240 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20   select a rowid 
20250 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65  at random and se
20260 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61  e if.    ** it a
20270 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e  lready exists in
20280 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
20290 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
202a0 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a  t, we have.    *
202b0 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66  * succeeded.  If
202c0 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69   the random rowi
202d0 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65  d does exist, we
202e0 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e   select a new on
202f0 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79  e.    ** and try
20300 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30   again, up to 10
20310 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a  0 times..    */.
20320 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
20330 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64  isTable );..#ifd
20340 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f  ef SQLITE_32BIT_
20350 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65  ROWID.#   define
20360 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66   MAX_ROWID 0x7ff
20370 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20  fffff.#else.    
20380 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  /* Some compiler
20390 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
203a0 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68   constants of th
203b0 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66  e form 0x7ffffff
203c0 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a  fffffffff..    *
203d0 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69  * Others complai
203e0 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66  n about 0x7fffff
203f0 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20  fffffffffffLL.  
20400 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
20410 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a  cro seems.    **
20420 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20   to provide the 
20430 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d  constant while m
20440 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c  aking all compil
20450 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a  ers happy..    *
20460 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  /.#   define MAX
20470 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28  _ROWID  (i64)( (
20480 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66  ((u64)0x7fffffff
20490 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78  )<<32) | (u64)0x
204a0 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69  ffffffff ).#endi
204b0 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  f..    if( !pC->
204c0 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
204d0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
204e0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
204f0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
20500 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
20510 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
20520 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
20530 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
20540 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
20550 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76  res ){.        v
20560 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   = 1;   /* IMP: 
20570 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f  R-61914-48074 */
20580 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
20590 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
205a0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
205b0 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75 72  IsValid(pC->pCur
205c0 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
205d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
205e0 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
205f0 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20  rsor, &v);.     
20600 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
20610 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
20620 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c   Cannot fail fol
20630 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74  lowing BtreeLast
20640 28 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  () */.        if
20650 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29  ( v>=MAX_ROWID )
20660 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  {.          pC->
20670 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d  useRandomRowid =
20680 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
20690 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b  e{.          v++
206a0 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39  ;   /* IMP: R-29
206b0 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20  538-34987 */.   
206c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
206d0 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51     }..#ifndef SQ
206e0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
206f0 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66 28 20  CREMENT.    if( 
20700 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20  pOp->p3 ){.     
20710 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
20720 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
20730 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
20740 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
20750 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 69  >p3>0 );.      i
20760 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
20770 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61          for(pFra
20780 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
20790 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
207a0 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
207b0 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
207c0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
207d0 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
207e0 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
207f0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
20800 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d  ->p3<=pFrame->nM
20810 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d  em );.        pM
20820 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  em = &pFrame->aM
20830 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
20840 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
20850 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
20860 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
20870 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
20880 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
20890 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
208a0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
208b0 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
208c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
208d0 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
208e0 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29  oChange(p, pMem)
208f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
20900 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
20910 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20  id(pMem) );..   
20920 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
20930 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29  E(pOp->p3, pMem)
20940 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
20950 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
20960 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73  (pMem);.      as
20970 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
20980 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
20990 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20   );  /* mem(P3) 
209a0 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
209b0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d   */.      if( pM
209c0 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57  em->u.i==MAX_ROW
209d0 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e  ID || pC->useRan
209e0 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
209f0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
20a00 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
20a10 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f  R-12275-61338 */
20a20 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
20a30 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
20a40 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
20a50 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b  if( v<pMem->u.i+
20a60 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d  1 ){.        v =
20a70 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a   pMem->u.i + 1;.
20a80 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d        }.      pM
20a90 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20  em->u.i = v;.   
20aa0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66   }.#endif.    if
20ab0 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  ( pC->useRandomR
20ac0 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a  owid ){.      /*
20ad0 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
20ae0 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38  OF: R-07677-4188
20af0 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74  1 If the largest
20b00 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20   ROWID is equal 
20b10 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  to the.      ** 
20b20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65  largest possible
20b30 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33 37   integer (922337
20b40 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74  2036854775807) t
20b50 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
20b60 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65  .      ** engine
20b70 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20   starts picking 
20b80 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64 61  positive candida
20b90 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e  te ROWIDs at ran
20ba0 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20  dom until.      
20bb0 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20  ** it finds one 
20bc0 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76  that is not prev
20bd0 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a  iously used. */.
20be0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
20bf0 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20  p->p3==0 );  /* 
20c00 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20  We cannot be in 
20c10 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64  random rowid mod
20c20 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20  e if this is.   
20c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c40 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20            ** an 
20c50 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
20c60 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e  ble. */.      cn
20c70 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b  t = 0;.      do{
20c80 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
20c90 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65  _randomness(size
20ca0 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20  of(v), &v);.    
20cb0 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f      v &= (MAX_RO
20cc0 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f  WID>>1); v++;  /
20cd0 2a 20 45 6e 73 75 72 65 20 74 68 61 74 20 76 20  * Ensure that v 
20ce0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
20cf0 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77  zero */.      }w
20d00 68 69 6c 65 28 20 20 28 28 72 63 20 3d 20 73 71  hile(  ((rc = sq
20d10 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
20d20 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
20d30 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
20d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d70 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c    0, &res))==SQL
20d80 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20  ITE_OK).        
20d90 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a      && (res==0).
20da0 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
20db0 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20  ++cnt<100));.   
20dc0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
20dd0 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
20de0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
20df0 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
20e00 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33   IMP: R-38219-53
20e10 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  002 */.        g
20e20 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
20e30 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
20e40 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e        assert( v>
20e50 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34  0 );  /* EV: R-4
20e60 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20  0812-03570 */.  
20e70 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69    }.    pC->rowi
20e80 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
20e90 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
20ea0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
20eb0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
20ec0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
20ed0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
20ee0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
20ef0 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20   Opcode: Insert 
20f00 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
20f10 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
20f20 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b  ey=r[P3] data=r[
20f30 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  P2].**.** Write 
20f40 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68  an entry into th
20f50 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f  e table of curso
20f60 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74  r P1.  A new ent
20f70 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64  ry is.** created
20f80 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61   if it doesn't a
20f90 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20  lready exist or 
20fa0 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20  the data for an 
20fb0 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72  existing.** entr
20fc0 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e  y is overwritten
20fd0 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74  .  The data is t
20fe0 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f  he value MEM_Blo
20ff0 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  b stored in regi
21000 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  ster.** number P
21010 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74  2. The key is st
21020 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
21030 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73   P3. The key mus
21040 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e  t.** be a MEM_In
21050 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
21060 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
21070 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
21080 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
21090 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
210a0 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
210b0 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20  therwise not).  
210c0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41  If the OPFLAG_LA
210d0 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20  STROWID flag of 
210e0 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68  P5 is set,.** th
210f0 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72  en rowid is stor
21100 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e  ed for subsequen
21110 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a  t return by the.
21120 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ** sqlite3_last_
21130 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
21140 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69  unction (otherwi
21150 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66  se it is unmodif
21160 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ied)..**.** If t
21170 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
21180 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20  KRESULT flag of 
21190 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 69 66  P5 is set and if
211a0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
211b0 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20  * the last seek 
211c0 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f  operation (OP_No
211d0 74 45 78 69 73 74 73 29 20 77 61 73 20 61 20 73  tExists) was a s
211e0 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69  uccess, then thi
211f0 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77  s.** operation w
21200 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20  ill not attempt 
21210 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70 72  to find the appr
21220 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f  opriate row befo
21230 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20  re doing.** the 
21240 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20  insert but will 
21250 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69 74  instead overwrit
21260 65 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 74  e the row that t
21270 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
21280 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
21290 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62  ng to.  Presumab
212a0 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50  ly, the prior OP
212b0 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64  _NotExists opcod
212c0 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79  e.** has already
212d0 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20   positioned the 
212e0 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79  cursor correctly
212f0 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70  .  This is an op
21300 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68  timization.** th
21310 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72  at boosts perfor
21320 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e  mance by avoidin
21330 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b  g redundant seek
21340 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
21350 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
21360 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
21370 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  n this opcode is
21380 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55   part of an.** U
21390 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e  PDATE operation.
213a0 20 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20    Otherwise (if 
213b0 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61  the flag is clea
213c0 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  r) then this opc
213d0 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f  ode.** is part o
213e0 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72  f an INSERT oper
213f0 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66  ation.  The diff
21400 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69  erence is only i
21410 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74  mportant to.** t
21420 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a  he update hook..
21430 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20  **.** Parameter 
21440 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20  P4 may point to 
21450 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  a string contain
21460 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61  ing the table-na
21470 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65  me, or.** may be
21480 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20   NULL. If it is 
21490 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
214a0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a  he update-hook .
214b0 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64  ** (sqlite3.xUpd
214c0 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20  ateCallback) is 
214d0 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e  invoked followin
214e0 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69  g a successful i
214f0 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41  nsert..**.** (WA
21500 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50  RNING/TODO: If P
21510 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75  1 is a pseudo-cu
21520 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64  rsor and P2 is d
21530 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c  ynamically.** al
21540 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77  located, then ow
21550 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73  nership of P2 is
21560 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20   transferred to 
21570 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  the pseudo-curso
21580 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65  r.** and registe
21590 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68  r P2 becomes eph
215a0 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20  emeral.  If the 
215b0 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65  cursor is change
215c0 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  d, the.** value 
215d0 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77  of register P2 w
215e0 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e  ill then change.
215f0 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73    Make sure this
21600 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75   does not.** cau
21610 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  se any problems.
21620 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ).**.** This ins
21630 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
21640 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20  rks on tables.  
21650 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
21660 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
21670 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f  r indices is OP_
21680 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a  IdxInsert..*/./*
21690 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49   Opcode: InsertI
216a0 6e 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  nt P1 P2 P3 P4 P
216b0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  5.** Synopsis:  
216c0 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72  intkey=P3 data=r
216d0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P2].**.** This 
216e0 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
216f0 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63  ke OP_Insert exc
21700 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79  ept that the key
21710 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67   is the.** integ
21720 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74  er value P3, not
21730 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
21740 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64  e integer stored
21750 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
21760 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  .*/.case OP_Inse
21770 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73  rt: .case OP_Ins
21780 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20  ertInt: {.  Mem 
21790 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *pData;       /*
217a0 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
217b0 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72  g data for the r
217c0 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
217d0 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rted */.  Mem *p
217e0 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  Key;        /* M
217f0 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
21800 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63  key  for the rec
21810 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65  ord */.  i64 iKe
21820 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  y;         /* Th
21830 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20  e integer ROWID 
21840 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72  or key for the r
21850 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
21860 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  rted */.  VdbeCu
21870 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43  rsor *pC;   /* C
21880 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69  ursor to table i
21890 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74  nto which insert
218a0 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20   is written */. 
218b0 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
218c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
218d0 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70  zero-bytes to ap
218e0 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65  pend */.  int se
218f0 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52  ekResult;   /* R
21900 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73  esult of prior s
21910 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55  eek or 0 if no U
21920 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
21930 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  g */.  const cha
21940 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61  r *zDb;  /* data
21950 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64  base name - used
21960 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68   by the update h
21970 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ook */.  const c
21980 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61  har *zTbl; /* Ta
21990 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ble name - used 
219a0 62 79 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f  by the opdate ho
219b0 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20  ok */.  int op; 
219c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
219d0 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68  ode for update h
219e0 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41  ook: SQLITE_UPDA
219f0 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53  TE or SQLITE_INS
21a00 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20  ERT */..  pData 
21a10 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
21a20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
21a30 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
21a40 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
21a50 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
21a60 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20  alid(pData) );. 
21a70 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
21a80 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
21a90 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
21aa0 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
21ab0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
21ac0 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
21ad0 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
21ae0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
21af0 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
21b00 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44  RACE(pOp->p2, pD
21b10 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70  ata);..  if( pOp
21b20 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
21b30 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20  ert ){.    pKey 
21b40 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
21b50 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
21b60 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ey->flags & MEM_
21b70 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Int );.    asser
21b80 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b  t( memIsValid(pK
21b90 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  ey) );.    REGIS
21ba0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
21bb0 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b  3, pKey);.    iK
21bc0 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a  ey = pKey->u.i;.
21bd0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
21be0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
21bf0 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29  ==OP_InsertInt )
21c00 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70  ;.    iKey = pOp
21c10 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  ->p3;.  }..  if(
21c20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
21c30 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
21c40 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20  Change++;.  if( 
21c50 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
21c60 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d  _LASTROWID ) db-
21c70 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
21c80 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20  tRowid = iKey;. 
21c90 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
21ca0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
21cb0 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30      pData->z = 0
21cc0 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d  ;.    pData->n =
21cd0 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
21ce0 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e   assert( pData->
21cf0 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f  flags & (MEM_Blo
21d00 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20  b|MEM_Str) );.  
21d10 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d  }.  seekResult =
21d20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
21d30 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
21d40 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
21d50 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20  ult : 0);.  if( 
21d60 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
21d70 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e  EM_Zero ){.    n
21d80 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e  Zero = pData->u.
21d90 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a  nZero;.  }else{.
21da0 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20      nZero = 0;. 
21db0 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
21dc0 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
21dd0 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65  >pCursor, 0, iKe
21de0 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y,.             
21df0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61               pDa
21e00 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c  ta->z, pData->n,
21e10 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20   nZero,.        
21e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e30 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46    (pOp->p5 & OPF
21e40 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20  LAG_APPEND)!=0, 
21e50 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a  seekResult.  );.
21e60 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
21e70 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65  id = 0;.  pC->de
21e80 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
21e90 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
21ea0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
21eb0 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
21ec0 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
21ed0 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
21ee0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
21ef0 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61  _OK && db->xUpda
21f00 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
21f10 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a  p->p4.z ){.    z
21f20 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
21f30 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
21f40 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e   zTbl = pOp->p4.
21f50 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f  z;.    op = ((pO
21f60 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
21f70 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
21f80 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
21f90 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61  E_INSERT);.    a
21fa0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
21fb0 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55  le );.    db->xU
21fc0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
21fd0 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70  ->pUpdateArg, op
21fe0 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65  , zDb, zTbl, iKe
21ff0 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  y);.    assert( 
22000 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
22010 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
22020 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20   Opcode: Delete 
22030 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
22040 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65  ** Delete the re
22050 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68  cord at which th
22060 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63  e P1 cursor is c
22070 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
22080 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72  g..**.** The cur
22090 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74  sor will be left
220a0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74   pointing at eit
220b0 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20  her the next or 
220c0 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20  the previous.** 
220d0 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61  record in the ta
220e0 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65  ble. If it is le
220f0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
22100 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20  he next record, 
22110 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74  then.** the next
22120 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
22130 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f  n will be a no-o
22140 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73 20  p.  Hence it is 
22150 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20  OK to delete.** 
22160 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69  a record from wi
22170 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70  thin a Next loop
22180 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
22190 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
221a0 61 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c  ag of P2 is set,
221b0 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68   then the row ch
221c0 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a  ange count is.**
221d0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
221e0 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a  herwise not)..**
221f0 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20  .** P1 must not 
22200 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  be pseudo-table.
22210 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61    It has to be a
22220 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68   real table with
22230 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  .** multiple row
22240 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  s..**.** If P4 i
22250 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
22260 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20   it is the name 
22270 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
22280 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74  t P1 is.** point
22290 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64  ing to.  The upd
222a0 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65  ate hook will be
222b0 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20   invoked, if it 
222c0 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34  exists..** If P4
222d0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65   is not NULL the
222e0 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  n the P1 cursor 
222f0 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70  must have been p
22300 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69  ositioned.** usi
22310 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70  ng OP_NotFound p
22320 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67  rior to invoking
22330 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f   this opcode..*/
22340 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a  .case OP_Delete:
22350 20 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a 20   {.  i64 iKey;. 
22360 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
22370 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
22380 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22390 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
223a0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
223b0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
223c0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
223d0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
223e0 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c  or!=0 );  /* Onl
223f0 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61 6c  y valid for real
22400 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75   tables, no pseu
22410 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 20 20 69 4b  dotables */.  iK
22420 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77  ey = pC->lastRow
22430 69 64 3b 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79  id;      /* Only
22440 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 75 70   used for the up
22450 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 0a 20 20  date hook */..  
22460 2f 2a 20 54 68 65 20 4f 50 5f 44 65 6c 65 74 65  /* The OP_Delete
22470 20 6f 70 63 6f 64 65 20 61 6c 77 61 79 73 20 66   opcode always f
22480 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f 74  ollows an OP_Not
22490 45 78 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61 73  Exists or OP_Las
224a0 74 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c  t or.  ** OP_Col
224b0 75 6d 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  umn on the same 
224c0 74 61 62 6c 65 20 77 69 74 68 6f 75 74 20 61 6e  table without an
224d0 79 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f 70  y intervening op
224e0 65 72 61 74 69 6f 6e 73 20 74 68 61 74 0a 20 20  erations that.  
224f0 2a 2a 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f 72  ** might move or
22500 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20   invalidate the 
22510 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 63  cursor.  Hence c
22520 75 72 73 6f 72 20 70 43 20 69 73 20 61 6c 77 61  ursor pC is alwa
22530 79 73 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a  ys pointing.  **
22540 20 74 6f 20 74 68 65 20 72 6f 77 20 74 6f 20 62   to the row to b
22550 65 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  e deleted and th
22560 65 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  e sqlite3VdbeCur
22570 73 6f 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65 72  sorMoveto() oper
22580 61 74 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77  ation.  ** below
22590 20 69 73 20 61 6c 77 61 79 73 20 61 20 6e 6f 2d   is always a no-
225a0 6f 70 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66 61  op and cannot fa
225b0 69 6c 2e 20 20 57 65 20 77 69 6c 6c 20 72 75 6e  il.  We will run
225c0 20 69 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f 75   it anyhow, thou
225d0 67 68 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61 72  gh,.  ** to guar
225e0 64 20 61 67 61 69 6e 73 74 20 66 75 74 75 72 65  d against future
225f0 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
22600 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a  code generator..
22610 20 20 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28 20    **/.  assert( 
22620 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
22630 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  to==0 );.  rc = 
22640 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
22650 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
22660 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c  f( NEVER(rc!=SQL
22670 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61  ITE_OK) ) goto a
22680 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
22690 72 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  r;..  rc = sqlit
226a0 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
226b0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  ->pCursor);.  pC
226c0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
226d0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
226e0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
226f0 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
22700 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
22710 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
22720 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
22730 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
22740 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65  z && pC->isTable
22750 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   ){.    db->xUpd
22760 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
22770 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49  pUpdateArg, SQLI
22780 54 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20 20  TE_DELETE,.     
22790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227a0 20 20 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69     db->aDb[pC->i
227b0 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d 3e  Db].zName, pOp->
227c0 70 34 2e 7a 2c 20 69 4b 65 79 29 3b 0a 20 20 20  p4.z, iKey);.   
227d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
227e0 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  >=0 );.  }.  if(
227f0 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
22800 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
22810 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61  Change++;.  brea
22820 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  k;.}./* Opcode: 
22830 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a  ResetCount * * *
22840 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76   * *.**.** The v
22850 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e  alue of the chan
22860 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f  ge counter is co
22870 70 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  pied to the data
22880 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63  base handle.** c
22890 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72  hange counter (r
228a0 65 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65  eturned by subse
228b0 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73  quent calls to s
228c0 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
228d0 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56  )..** Then the V
228e0 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e  Ms internal chan
228f0 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74  ge counter reset
22900 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20  s to 0..** This 
22910 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
22920 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a  er programs..*/.
22930 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75  case OP_ResetCou
22940 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  nt: {.  sqlite3V
22950 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
22960 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
22970 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
22980 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
22990 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f  Opcode: SorterCo
229a0 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50  mpare P1 P2 P3 P
229b0 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  4.** Synopsis:  
229c0 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72 69 6d  if key(P1)!=trim
229d0 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20  (r[P3],P4) goto 
229e0 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  P2.**.** P1 is a
229f0 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20   sorter cursor. 
22a00 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
22a10 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65 66   compares a pref
22a20 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63  ix of the.** rec
22a30 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67 69  ord blob in regi
22a40 73 74 65 72 20 50 33 20 61 67 61 69 6e 73 74 20  ster P3 against 
22a50 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20  a prefix of the 
22a60 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 74  entry that .** t
22a70 68 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72  he sorter cursor
22a80 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
22a90 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20  s to.  Only the 
22aa0 66 69 72 73 74 20 50 34 20 66 69 65 6c 64 73 0a  first P4 fields.
22ab0 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20  ** of r[P3] and 
22ac0 74 68 65 20 73 6f 72 74 65 72 20 72 65 63 6f 72  the sorter recor
22ad0 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a  d are compared..
22ae0 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
22af0 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65 72  P3 or the sorter
22b00 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c   contains a NULL
22b10 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69 72   in one of their
22b20 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20   significant.** 
22b30 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e  fields (not coun
22b40 74 69 6e 67 20 74 68 65 20 50 34 20 66 69 65 6c  ting the P4 fiel
22b50 64 73 20 61 74 20 74 68 65 20 65 6e 64 20 77 68  ds at the end wh
22b60 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64 29  ich are ignored)
22b70 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d   then.** the com
22b80 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75 6d  parison is assum
22b90 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a  ed to be equal..
22ba0 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75  **.** Fall throu
22bb0 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74 72  gh to next instr
22bc0 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74 77  uction if the tw
22bd0 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61 72  o records compar
22be0 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61  e equal to.** ea
22bf0 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20  ch other.  Jump 
22c00 74 6f 20 50 32 20 69 66 20 74 68 65 79 20 61 72  to P2 if they ar
22c10 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a  e different..*/.
22c20 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f  case OP_SorterCo
22c30 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43  mpare: {.  VdbeC
22c40 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
22c50 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79   res;.  int nKey
22c60 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e  Col;..  pC = p->
22c70 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
22c80 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
22c90 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73 65  er(pC) );.  asse
22ca0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
22cb0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70  =P4_INT32 );.  p
22cc0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
22cd0 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20  >p3];.  nKeyCol 
22ce0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72  = pOp->p4.i;.  r
22cf0 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73  es = 0;.  rc = s
22d00 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
22d10 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33  Compare(pC, pIn3
22d20 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29  , nKeyCol, &res)
22d30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
22d40 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
22d50 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
22d60 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
22d70 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a    }.  break;.};.
22d80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
22d90 65 72 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a  erData P1 P2 * *
22da0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
22db0 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a  r[P2]=data.**.**
22dc0 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
22dd0 73 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72  ster P2 the curr
22de0 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20  ent sorter data 
22df0 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f  for sorter curso
22e00 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P1..*/.case OP
22e10 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20  _SorterData: {. 
22e20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
22e30 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
22e40 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20  [pOp->p2];.  pC 
22e50 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
22e60 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
22e70 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
22e80 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
22e90 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43  eSorterRowkey(pC
22ea0 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72  , pOut);.  asser
22eb0 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc!=SQLITE_OK
22ec0 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73   || (pOut->flags
22ed0 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a   & MEM_Blob) );.
22ee0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22ef0 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50  pcode: RowData P
22f00 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
22f10 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61  nopsis: r[P2]=da
22f20 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ta.**.** Write i
22f30 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
22f40 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
22f50 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72   data for cursor
22f60 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
22f70 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
22f80 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
22f90 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20   .** It is just 
22fa0 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
22fb0 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
22fc0 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
22fd0 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
22fe0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
22ff0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
23000 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
23010 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
23020 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
23030 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
23040 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
23050 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
23060 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65  /* Opcode: RowKe
23070 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
23080 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
23090 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  =key.**.** Write
230a0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
230b0 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
230c0 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f  ow key for curso
230d0 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
230e0 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
230f0 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
23100 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73    .** The key is
23110 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
23120 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
23130 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
23140 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
23150 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
23160 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
23170 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
23180 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
23190 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
231a0 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
231b0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
231c0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
231d0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a  .case OP_RowKey:
231e0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61  .case OP_RowData
231f0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
23200 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
23210 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e   *pCrsr;.  u32 n
23220 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20  ;.  i64 n64;..  
23230 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
23240 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p2];.  memAbou
23250 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
23260 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74  t);..  /* Note t
23270 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52  hat RowKey and R
23280 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c  owData are reall
23290 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  y exactly the sa
232a0 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a  me instruction *
232b0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
232c0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
232d0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
232e0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
232f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
23300 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
23310 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
23320 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20   pC->isTable || 
23330 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
23340 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
23350 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
23360 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ==0 || pOp->opco
23370 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de==OP_RowData )
23380 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
23390 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
233a0 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
233b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
233c0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
233d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
233e0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
233f0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
23400 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
23410 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
23420 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
23430 29 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  ) );..  /* The O
23440 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f  P_RowKey and OP_
23450 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20  RowData opcodes 
23460 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50  always follow OP
23470 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20  _NotExists or.  
23480 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f  ** OP_Rewind/Op_
23490 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74  Next with no int
234a0 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63  ervening instruc
234b0 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74  tions that might
234c0 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a   invalidate.  **
234d0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65   the cursor.  He
234e0 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nce the followin
234f0 67 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  g sqlite3VdbeCur
23500 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c  sorMoveto() call
23510 20 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20   is always.  ** 
23520 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20  a no-op and can 
23530 6e 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75 74  never fail.  But
23540 20 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e 20   we leave it in 
23550 70 6c 61 63 65 20 61 73 20 61 20 73 61 66 65 74  place as a safet
23560 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  y..  */.  assert
23570 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
23580 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20  veto==0 );.  rc 
23590 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
235a0 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
235b0 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
235c0 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f  QLITE_OK) ) goto
235d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
235e0 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e  ror;..  if( pC->
235f0 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
23600 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69    assert( !pC->i
23610 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56  sTable );.    VV
23620 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c  A_ONLY(rc =) sql
23630 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
23640 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20  (pCrsr, &n64);. 
23650 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
23660 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f  QLITE_OK );    /
23670 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f  * True because o
23680 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  f CursorMoveto()
23690 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20   call above */. 
236a0 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61     if( n64>db->a
236b0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
236c0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
236d0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
236e0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20  ;.    }.    n = 
236f0 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73  (u32)n64;.  }els
23700 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28  e{.    VVA_ONLY(
23710 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
23720 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
23730 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72  , &n);.    asser
23740 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
23750 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69   );    /* DataSi
23760 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c  ze() cannot fail
23770 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75   */.    if( n>(u
23780 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  32)db->aLimit[SQ
23790 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
237a0 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
237b0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
237c0 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20    }.  testcase( 
237d0 6e 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71  n==0 );.  if( sq
237e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61  lite3VdbeMemClea
237f0 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c  rAndResize(pOut,
23800 20 4d 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a 20   MAX(n,32)) ){. 
23810 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
23820 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
23830 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
23840 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
23850 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ob);.  if( pC->i
23860 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  sTable==0 ){.   
23870 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
23880 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20  eeKey(pCrsr, 0, 
23890 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d  n, pOut->z);.  }
238a0 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
238b0 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28  qlite3BtreeData(
238c0 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
238d0 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75  t->z);.  }.  pOu
238e0 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
238f0 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73  UTF8;  /* In cas
23900 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76  e the blob is ev
23910 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20  er cast to text 
23920 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  */.  UPDATE_MAX_
23930 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
23940 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
23950 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
23960 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
23970 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31  Opcode: Rowid P1
23980 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
23990 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
239a0 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69  id.**.** Store i
239b0 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
239c0 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
239d0 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
239e0 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
239f0 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
23a00 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
23a10 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65  *.** P1 can be e
23a20 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72  ither an ordinar
23a30 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72  y table or a vir
23a40 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
23a50 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  re used to.** be
23a60 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56   a separate OP_V
23a70 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72  Rowid opcode for
23a80 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61   use with virtua
23a90 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68  l tables, but th
23aa0 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65  is.** one opcode
23ab0 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62   now works for b
23ac0 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e  oth table types.
23ad0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69  .*/.case OP_Rowi
23ae0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
23af0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
23b00 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62  release */.  Vdb
23b10 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
23b20 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f  64 v;.  sqlite3_
23b30 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
23b40 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
23b50 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
23b60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
23b70 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
23b80 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
23b90 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
23ba0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
23bb0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
23bc0 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
23bd0 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d  bleReg==0 || pC-
23be0 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66  >nullRow );.  if
23bf0 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
23c00 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
23c10 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
23c20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20   break;.  }else 
23c30 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  if( pC->deferred
23c40 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20  Moveto ){.    v 
23c50 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  = pC->movetoTarg
23c60 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  et;.#ifndef SQLI
23c70 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
23c80 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28  ABLE.  }else if(
23c90 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
23ca0 20 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20   ){.    pVtab = 
23cb0 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  pC->pVtabCursor-
23cc0 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64  >pVtab;.    pMod
23cd0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
23ce0 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74  dule;.    assert
23cf0 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  ( pModule->xRowi
23d00 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  d );.    rc = pM
23d10 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43  odule->xRowid(pC
23d20 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26  ->pVtabCursor, &
23d30 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  v);.    sqlite3V
23d40 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
23d50 70 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69  p, pVtab);.#endi
23d60 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
23d70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
23d80 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
23d90 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
23da0 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  r!=0 );.    rc =
23db0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
23dc0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
23dd0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
23de0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
23df0 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  or;.    if( pC->
23e00 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a  rowidIsValid ){.
23e10 20 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61        v = pC->la
23e20 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c  stRowid;.    }el
23e30 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
23e40 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
23e50 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ze(pC->pCursor, 
23e60 26 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  &v);.      asser
23e70 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
23e80 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73   );  /* Always s
23e90 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72  o because of Cur
23ea0 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76  sorMoveto() abov
23eb0 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  e */.    }.  }. 
23ec0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
23ed0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
23ee0 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50  pcode: NullRow P
23ef0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
23f00 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  Move the cursor 
23f10 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77  P1 to a null row
23f20 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e  .  Any OP_Column
23f30 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74   operations.** t
23f40 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20  hat occur while 
23f50 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e  the cursor is on
23f60 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69   the null row wi
23f70 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69  ll always.** wri
23f80 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  te a NULL..*/.ca
23f90 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b  se OP_NullRow: {
23fa0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
23fb0 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  C;..  assert( pO
23fc0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
23fd0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
23fe0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
23ff0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
24000 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
24010 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
24020 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
24030 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
24040 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
24050 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
24060 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a   pC->pCursor ){.
24070 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
24080 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e  ClearCursor(pC->
24090 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
240a0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
240b0 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20  ode: Last P1 P2 
240c0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
240d0 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
240e0 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
240f0 6f 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74  or Prev instruct
24100 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
24110 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
24120 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
24130 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
24140 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
24150 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
24160 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
24170 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
24180 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
24190 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
241a0 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
241b0 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
241c0 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
241d0 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
241e0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
241f0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
24200 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
24210 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
24220 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
24230 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
24240 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
24250 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
24260 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
24270 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
24280 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
24290 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
242a0 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61   not Next..*/.ca
242b0 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20  se OP_Last: {   
242c0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
242d0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
242e0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
242f0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
24300 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24310 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
24320 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
24330 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
24340 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
24350 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
24360 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
24370 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  r;.  res = 0;.  
24380 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
24390 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
243a0 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73  e3BtreeLast(pCrs
243b0 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e  r, &res);.  pC->
243c0 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
243d0 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
243e0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
243f0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
24400 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
24410 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
24420 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c  TALE;.#ifdef SQL
24430 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
24440 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73 74  seekOp = OP_Last
24450 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
24460 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20  Op->p2>0 ){.    
24470 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
24480 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  res!=0,2);.    i
24490 66 28 20 72 65 73 20 29 20 70 63 20 3d 20 70 4f  f( res ) pc = pO
244a0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
244b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
244c0 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50  pcode: Sort P1 P
244d0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
244e0 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65  is opcode does e
244f0 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
24500 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69  thing as OP_Rewi
24510 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  nd except that.*
24520 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20  * it increments 
24530 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  an undocumented 
24540 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
24550 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
24560 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20  ..**.** Sorting 
24570 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20  is accomplished 
24580 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72  by writing recor
24590 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e  ds into a sortin
245a0 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e  g index,.** then
245b0 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20   rewinding that 
245c0 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e  index and playin
245d0 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62  g it back from b
245e0 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65  eginning to.** e
245f0 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20  nd.  We use the 
24600 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69  OP_Sort opcode i
24610 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77  nstead of OP_Rew
24620 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a  ind to do the.**
24630 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68   rewinding so th
24640 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  at the global va
24650 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69  riable will be i
24660 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a  ncremented and.*
24670 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  * regression tes
24680 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  ts can determine
24690 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
246a0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  the optimizer is
246b0 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70  .** correctly op
246c0 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72  timizing out sor
246d0 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
246e0 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a  orterSort:    /*
246f0 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
24700 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20  _Sort: {        
24710 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65  /* jump */.#ifde
24720 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
24730 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
24740 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt++;.  sqlite3_
24750 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a  search_count--;.
24760 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75  #endif.  p->aCou
24770 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
24780 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a  STATUS_SORT]++;.
24790 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
247a0 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64  h into OP_Rewind
247b0 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a   */.}./* Opcode:
247c0 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20   Rewind P1 P2 * 
247d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
247e0 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
247f0 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
24800 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
24810 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
24820 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
24830 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
24840 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
24850 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
24860 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
24870 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
24880 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
24890 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
248a0 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
248b0 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
248c0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
248d0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
248e0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
248f0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
24900 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ction..**.** Thi
24910 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
24920 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
24930 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
24940 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a   forward order,.
24950 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  ** from the begi
24960 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65  nning toward the
24970 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20   end.  In other 
24980 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
24990 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
249a0 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20  ed to use Next, 
249b0 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73  not Prev..*/.cas
249c0 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20  e OP_Rewind: {  
249d0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
249e0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
249f0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
24a00 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
24a10 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
24a20 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
24a30 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
24a40 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24a50 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24a60 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
24a70 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
24a80 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  pC)==(pOp->opcod
24a90 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74  e==OP_SorterSort
24aa0 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a  ) );.  res = 1;.
24ab0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
24ac0 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
24ad0 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65   = OP_Rewind;.#e
24ae0 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f 72  ndif.  if( isSor
24af0 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72  ter(pC) ){.    r
24b00 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
24b10 6f 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c 20  orterRewind(pC, 
24b20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  &res);.  }else{.
24b30 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e      pCrsr = pC->
24b40 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73  pCursor;.    ass
24b50 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
24b60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
24b70 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20  reeFirst(pCrsr, 
24b80 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64  &res);.    pC->d
24b90 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
24ba0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
24bb0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
24bc0 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f  TALE;.    pC->ro
24bd0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
24be0 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f    }.  pC->nullRo
24bf0 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61  w = (u8)res;.  a
24c00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
24c10 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e   && pOp->p2<p->n
24c20 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  Op );.  VdbeBran
24c30 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
24c40 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a  );.  if( res ){.
24c50 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
24c60 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
24c70 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
24c80 20 4e 65 78 74 20 50 31 20 50 32 20 50 33 20 50   Next P1 P2 P3 P
24c90 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e  4 P5.**.** Advan
24ca0 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  ce cursor P1 so 
24cb0 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
24cc0 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64  o the next key/d
24cd0 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
24ce0 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
24cf0 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
24d00 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c   no more key/val
24d10 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
24d20 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
24d30 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
24d40 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
24d50 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61   if the cursor a
24d60 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65  dvance was succe
24d70 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
24d80 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
24d90 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74  ..**.** The Next
24da0 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
24db0 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  valid following 
24dc0 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  an SeekGT, SeekG
24dd0 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69  E, or.** OP_Rewi
24de0 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74  nd opcode used t
24df0 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63  o position the c
24e00 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20  ursor.  Next is 
24e10 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74  not allowed.** t
24e20 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c  o follow SeekLT,
24e30 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c   SeekLE, or OP_L
24e40 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ast..**.** The P
24e50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
24e60 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
24e70 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
24e80 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20  table.  P1 must 
24e90 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65  have.** been ope
24ea0 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69  ned prior to thi
24eb0 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20  s opcode or the 
24ec0 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67  program will seg
24ed0 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  fault..**.** The
24ee0 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68   P3 value is a h
24ef0 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65  int to the btree
24f00 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
24f10 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a   If P3==1, that.
24f20 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61  ** means P1 is a
24f30 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20  n SQL index and 
24f40 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75  that this instru
24f50 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65  ction could have
24f60 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64   been.** omitted
24f70 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68   if that index h
24f80 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20  ad been unique. 
24f90 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30   P3 is usually 0
24fa0 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61  .  P3 is.** alwa
24fb0 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  ys either 0 or 1
24fc0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c  ..**.** P4 is al
24fd0 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f  ways of type P4_
24fe0 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e  ADVANCE. The fun
24ff0 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f  ction pointer po
25000 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  ints to.** sqlit
25010 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a  e3BtreeNext()..*
25020 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f  *.** If P5 is po
25030 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a  sitive and the j
25040 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68  ump is taken, th
25050 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72  en event counter
25060 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20  .** number P5-1 
25070 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
25080 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63  statement is inc
25090 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  remented..**.** 
250a0 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20  See also: Prev, 
250b0 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a  NextIfOpen.*/./*
250c0 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f   Opcode: NextIfO
250d0 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
250e0 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P5.**.** This op
250f0 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20  code works just 
25100 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74  like Next except
25110 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20   that if cursor 
25120 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65  P1 is not.** ope
25130 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e  n it behaves a n
25140 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  o-op..*/./* Opco
25150 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50  de: Prev P1 P2 P
25160 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61  3 P4 P5.**.** Ba
25170 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20  ck up cursor P1 
25180 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
25190 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  s to the previou
251a0 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  s key/data pair 
251b0 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
251c0 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
251d0 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f  ere is no previo
251e0 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  us key/value pai
251f0 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
25200 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
25210 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
25220 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
25230 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20  e cursor backup 
25240 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
25250 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
25260 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
25270 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63  .** The Prev opc
25280 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ode is only vali
25290 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53  d following an S
252a0 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f  eekLT, SeekLE, o
252b0 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63  r.** OP_Last opc
252c0 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69  ode used to posi
252d0 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e  tion the cursor.
252e0 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c    Prev is not al
252f0 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c  lowed.** to foll
25300 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  ow SeekGT, SeekG
25310 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e  E, or OP_Rewind.
25320 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
25330 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
25340 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
25350 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
25360 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  e.  If P1 is.** 
25370 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68  not open then th
25380 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e behavior is un
25390 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  defined..**.** T
253a0 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
253b0 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
253c0 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
253d0 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
253e0 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
253f0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
25400 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
25410 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
25420 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
25430 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
25440 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
25450 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
25460 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
25470 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
25480 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
25490 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
254a0 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
254b0 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
254c0 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
254d0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
254e0 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  s()..**.** If P5
254f0 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
25500 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
25510 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
25520 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
25530 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
25540 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
25550 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
25560 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  */./* Opcode: Pr
25570 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50  evIfOpen P1 P2 P
25580 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
25590 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
255a0 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65  just like Prev e
255b0 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75  xcept that if cu
255c0 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a  rsor P1 is not.*
255d0 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65  * open it behave
255e0 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
255f0 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74  se OP_SorterNext
25600 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  : {  /* jump */.
25610 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
25620 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
25630 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
25640 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
25650 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
25660 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72  ;.  res = 0;.  r
25670 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
25680 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43  orterNext(db, pC
25690 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20  , &res);.  goto 
256a0 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20  next_tail;.case 
256b0 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20  OP_PrevIfOpen:  
256c0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
256d0 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a  e OP_NextIfOpen:
256e0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
256f0 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f   if( p->apCsr[pO
25700 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61  p->p1]==0 ) brea
25710 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  k;.  /* Fall thr
25720 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  ough */.case OP_
25730 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f  Prev:          /
25740 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
25750 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20  P_Next:         
25760 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
25770 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
25780 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
25790 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
257a0 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61  rt( pOp->p5<Arra
257b0 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65  ySize(p->aCounte
257c0 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  r) );.  pC = p->
257d0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
257e0 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b    res = pOp->p3;
257f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
25800 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
25810 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
25820 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
25830 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a   pC->pCursor );.
25840 20 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d 30    assert( res==0
25850 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20 70   || (res==1 && p
25860 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20 29  C->isTable==0) )
25870 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 65  ;.  testcase( re
25880 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74  s==1 );.  assert
25890 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
258a0 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70  P_Next || pOp->p
258b0 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
258c0 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a  te3BtreeNext );.
258d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
258e0 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c  pcode!=OP_Prev |
258f0 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
25900 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
25910 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73  Previous );.  as
25920 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
25930 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  e!=OP_NextIfOpen
25940 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
25950 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
25960 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65  eeNext );.  asse
25970 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
25980 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c  =OP_PrevIfOpen |
25990 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
259a0 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
259b0 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a  Previous);..  /*
259c0 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65   The Next opcode
259d0 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66   is only used af
259e0 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  ter SeekGT, Seek
259f0 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a  GE, and Rewind..
25a00 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70    ** The Prev op
25a10 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
25a20 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20  d after SeekLT, 
25a30 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74  SeekLE, and Last
25a40 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  . */.  assert( p
25a50 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
25a60 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ext || pOp->opco
25a70 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65  de!=OP_NextIfOpe
25a80 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  n.       || pC->
25a90 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47  seekOp==OP_SeekG
25aa0 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d  T || pC->seekOp=
25ab0 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20  =OP_SeekGE.     
25ac0 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
25ad0 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43  =OP_Rewind || pC
25ae0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75  ->seekOp==OP_Fou
25af0 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  nd);.  assert( p
25b00 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
25b10 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  rev || pOp->opco
25b20 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65  de!=OP_PrevIfOpe
25b30 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  n.       || pC->
25b40 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c  seekOp==OP_SeekL
25b50 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d  T || pC->seekOp=
25b60 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20  =OP_SeekLE.     
25b70 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
25b80 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72  =OP_Last );..  r
25b90 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76  c = pOp->p4.xAdv
25ba0 61 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f 72  ance(pC->pCursor
25bb0 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61  , &res);.next_ta
25bc0 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  il:.  pC->cacheS
25bd0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
25be0 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  ALE;.  VdbeBranc
25bf0 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32 29  hTaken(res==0,2)
25c00 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29  ;.  if( res==0 )
25c10 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  {.    pC->nullRo
25c20 77 20 3d 20 30 3b 0a 20 20 20 20 70 63 20 3d 20  w = 0;.    pc = 
25c30 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
25c40 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
25c50 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20  ->p5]++;.#ifdef 
25c60 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
25c70 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
25c80 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
25c90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 2d 3e   }else{.    pC->
25ca0 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 7d  nullRow = 1;.  }
25cb0 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
25cc0 6c 69 64 20 3d 20 30 3b 0a 20 20 67 6f 74 6f 20  lid = 0;.  goto 
25cd0 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
25ce0 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  upt;.}../* Opcod
25cf0 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20  e: IdxInsert P1 
25d00 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79  P2 P3 * P5.** Sy
25d10 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
25d20 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ].**.** Register
25d30 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c   P2 holds an SQL
25d40 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
25d50 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b  using the.** Mak
25d60 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
25d70 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f  ions.  This opco
25d80 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b  de writes that k
25d90 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69  ey.** into the i
25da0 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66  ndex P1.  Data f
25db0 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20  or the entry is 
25dc0 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  nil..**.** P3 is
25dd0 20 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f   a flag that pro
25de0 76 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20  vides a hint to 
25df0 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72  the b-tree layer
25e00 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e   that this.** in
25e10 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74  sert is likely t
25e20 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a  o be an append..
25e30 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
25e40 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
25e50 47 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  GE bit set, then
25e60 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
25e70 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  ter is.** increm
25e80 65 6e 74 65 64 20 62 79 20 74 68 69 73 20 69 6e  ented by this in
25e90 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74  struction.  If t
25ea0 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
25eb0 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a  E bit is clear,.
25ec0 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e  ** then the chan
25ed0 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e  ge counter is un
25ee0 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  changed..**.** I
25ef0 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
25f00 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
25f10 54 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  T bit set, then 
25f20 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20  the cursor must 
25f30 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e  have.** just don
25f40 65 20 61 20 73 65 65 6b 20 74 6f 20 74 68 65 20  e a seek to the 
25f50 73 70 6f 74 20 77 68 65 72 65 20 74 68 65 20 6e  spot where the n
25f60 65 77 20 65 6e 74 72 79 20 69 73 20 74 6f 20 62  ew entry is to b
25f70 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20 54  e inserted..** T
25f80 68 69 73 20 66 6c 61 67 20 61 76 6f 69 64 73 20  his flag avoids 
25f90 64 6f 69 6e 67 20 61 6e 20 65 78 74 72 61 20 73  doing an extra s
25fa0 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  eek..**.** This 
25fb0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
25fc0 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63   works for indic
25fd0 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
25fe0 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
25ff0 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73  ** for tables is
26000 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63   OP_Insert..*/.c
26010 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73  ase OP_SorterIns
26020 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e  ert:       /* in
26030 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  2 */.case OP_Idx
26040 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20  Insert: {       
26050 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
26060 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
26070 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
26080 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f    int nKey;.  co
26090 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a  nst char *zKey;.
260a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
260b0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
260c0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
260d0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
260e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
260f0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
26100 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
26110 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  C)==(pOp->opcode
26120 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
26130 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  t) );.  pIn2 = &
26140 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
26150 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66   assert( pIn2->f
26160 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
26170 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
26180 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
26190 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
261a0 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
261b0 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72  hange++;.  asser
261c0 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
261d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
261e0 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20  able==0 );.  rc 
261f0 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
26200 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  2);.  if( rc==SQ
26210 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69  LITE_OK ){.    i
26220 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
26230 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
26240 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57  lite3VdbeSorterW
26250 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a  rite(pC, pIn2);.
26260 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
26270 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b   nKey = pIn2->n;
26280 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49  .      zKey = pI
26290 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20  n2->z;.      rc 
262a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
262b0 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79  sert(pCrsr, zKey
262c0 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30  , nKey, "", 0, 0
262d0 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20  , pOp->p3, .    
262e0 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20        ((pOp->p5 
262f0 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
26300 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
26310 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20  ekResult : 0).  
26320 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20          );.     
26330 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
26340 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
26350 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68  ;.      pC->cach
26360 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
26370 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d  STALE;.    }.  }
26380 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26390 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74  Opcode: IdxDelet
263a0 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
263b0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
263c0 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54  r[P2@P3].**.** T
263d0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33  he content of P3
263e0 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74   registers start
263f0 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20  ing at register 
26400 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e  P2 form.** an un
26410 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
26420 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65  . This opcode re
26430 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79  moves that entry
26440 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e   from the .** in
26450 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75  dex opened by cu
26460 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  rsor P1..*/.case
26470 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b   OP_IdxDelete: {
26480 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
26490 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
264a0 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
264b0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
264c0 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
264d0 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61  pOp->p3>0 );.  a
264e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
264f0 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d   && pOp->p2+pOp-
26500 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
26510 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
26520 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
26530 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
26540 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
26550 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
26560 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
26570 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
26580 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
26590 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
265a0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
265b0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
265c0 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
265d0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e  ->pKeyInfo;.  r.
265e0 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
265f0 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75  p->p3;.  r.defau
26600 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61  lt_rc = 0;.  r.a
26610 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
26620 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p2];.#ifdef SQL
26630 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e  ITE_DEBUG.  { in
26640 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
26650 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
26660 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
26670 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
26680 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d   }.#endif.  rc =
26690 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
266a0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
266b0 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
266c0 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  s);.  if( rc==SQ
266d0 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
266e0 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
266f0 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
26700 28 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20 20 61  (pCrsr);.  }.  a
26710 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
26720 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
26730 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
26740 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
26750 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26760 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64  Opcode: IdxRowid
26770 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
26780 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
26790 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74  rowid.**.** Writ
267a0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
267b0 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
267c0 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20  ich is the last 
267d0 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63  entry in the rec
267e0 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e  ord at.** the en
267f0 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
26800 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  ey pointed to by
26810 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69   cursor P1.  Thi
26820 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64  s integer should
26830 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64   be.** the rowid
26840 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
26850 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69  try to which thi
26860 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f  s index entry po
26870 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ints..**.** See 
26880 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b  also: Rowid, Mak
26890 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65  eRecord..*/.case
268a0 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20   OP_IdxRowid: { 
268b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
268c0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
268d0 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  */.  BtCursor *p
268e0 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73  Crsr;.  VdbeCurs
268f0 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f  or *pC;.  i64 ro
26900 77 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  wid;..  assert( 
26910 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
26920 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
26930 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
26940 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
26950 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
26960 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
26970 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
26980 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
26990 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
269a0 4d 5f 4e 75 6c 6c 3b 0a 20 20 72 63 20 3d 20 73  M_Null;.  rc = s
269b0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
269c0 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
269d0 28 20 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f  ( NEVER(rc) ) go
269e0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
269f0 65 72 72 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  error;.  assert(
26a00 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
26a10 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
26a20 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
26a30 3d 30 20 29 3b 0a 20 20 69 66 28 20 21 70 43 2d  =0 );.  if( !pC-
26a40 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
26a50 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e  rowid = 0;  /* N
26a60 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
26a70 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65   used to silence
26a80 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
26a90 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
26aa0 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20  dbeIdxRowid(db, 
26ab0 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a  pCrsr, &rowid);.
26ac0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
26ad0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
26ae0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
26af0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
26b00 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f    pOut->u.i = ro
26b10 77 69 64 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  wid;.    pOut->f
26b20 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
26b30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
26b40 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45  /* Opcode: IdxGE
26b50 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
26b60 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
26b70 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
26b80 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
26b90 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
26ba0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
26bb0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
26bc0 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
26bd0 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
26be0 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  EY.  Compare thi
26bf0 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
26c00 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
26c10 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
26c20 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
26c30 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
26c40 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
26c50 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73  ROWID .** fields
26c60 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a   at the end..**.
26c70 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
26c80 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61  ex entry is grea
26c90 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
26ca0 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
26cb0 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20  ue.** then jump 
26cc0 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73  to P2.  Otherwis
26cd0 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
26ce0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
26cf0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  uction..*/./* Op
26d00 63 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20 50  code: IdxGT P1 P
26d10 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
26d20 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
26d30 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
26d40 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
26d50 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
26d60 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
26d70 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
26d80 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
26d90 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20  e PRIMARY KEY.  
26da0 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
26db0 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74   value against t
26dc0 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61  he index .** tha
26dd0 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
26de0 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
26df0 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d  gnoring the PRIM
26e00 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
26e10 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74   .** fields at t
26e20 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  he end..**.** If
26e30 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
26e40 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74  try is greater t
26e50 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
26e60 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74  e.** then jump t
26e70 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65  o P2.  Otherwise
26e80 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
26e90 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
26ea0 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ction..*/./* Opc
26eb0 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32  ode: IdxLT P1 P2
26ec0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
26ed0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
26ee0 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
26ef0 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
26f00 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
26f10 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
26f20 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
26f30 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
26f40 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
26f50 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
26f60 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
26f70 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e  gainst.** the in
26f80 64 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63  dex that P1 is c
26f90 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
26fa0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
26fb0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
26fc0 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68  r.** ROWID on th
26fd0 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a  e P1 index..**.*
26fe0 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
26ff0 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20  x entry is less 
27000 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
27010 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ue then jump to 
27020 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65  P2..** Otherwise
27030 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
27040 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
27050 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ction..*/./* Opc
27060 6f 64 65 3a 20 49 64 78 4c 45 20 50 31 20 50 32  ode: IdxLE P1 P2
27070 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
27080 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
27090 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
270a0 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
270b0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
270c0 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
270d0 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
270e0 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
270f0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
27100 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
27110 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
27120 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e  gainst.** the in
27130 64 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63  dex that P1 is c
27140 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
27150 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
27160 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
27170 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68  r.** ROWID on th
27180 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a  e P1 index..**.*
27190 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
271a0 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20  x entry is less 
271b0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
271c0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74   the key value t
271d0 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50  hen jump.** to P
271e0 32 2e 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  2. Otherwise fal
271f0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
27200 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
27210 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  n..*/.case OP_Id
27220 78 4c 45 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLE:          /*
27230 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
27240 5f 49 64 78 47 54 3a 20 20 20 20 20 20 20 20 20  _IdxGT:         
27250 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
27260 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20   OP_IdxLT:      
27270 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
27280 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b  ase OP_IdxGE:  {
27290 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
272a0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
272b0 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
272c0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
272d0 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
272e0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
272f0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
27300 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
27310 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
27320 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
27330 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f   assert( pC->isO
27340 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65  rdered );.  asse
27350 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
27360 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  =0);.  assert( p
27370 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
27380 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
27390 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
273a0 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
273b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
273c0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
273d0 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
273e0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
273f0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
27400 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28  pOp->p4.i;.  if(
27410 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f   pOp->opcode<OP_
27420 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73  IdxLT ){.    ass
27430 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
27440 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f  ==OP_IdxLE || pO
27450 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
27460 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66  xGT );.    r.def
27470 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
27480 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
27490 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
274a0 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
274b0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
274c0 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75  T );.    r.defau
274d0 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20  lt_rc = 0;.  }. 
274e0 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
274f0 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
27500 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
27510 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
27520 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
27530 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
27540 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
27550 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
27560 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  res = 0;  /* Not
27570 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
27580 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
27590 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72   warning. */.  r
275a0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
275b0 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c  dxKeyCompare(db,
275c0 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a   pC, &r, &res);.
275d0 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64    assert( (OP_Id
275e0 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c  xLE&1)==(OP_IdxL
275f0 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47  T&1) && (OP_IdxG
27600 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26  E&1)==(OP_IdxGT&
27610 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70  1) );.  if( (pOp
27620 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50  ->opcode&1)==(OP
27630 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20  _IdxLT&1) ){.   
27640 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
27650 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
27660 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
27670 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
27680 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c  es = -res;.  }el
27690 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
276a0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
276b0 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxGE || pOp->op
276c0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
276d0 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d  ;.    res++;.  }
276e0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
276f0 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69  en(res>0,2);.  i
27700 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20  f( res>0 ){.    
27710 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
27720 20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   ;.  }.  break;.
27730 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
27740 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a  stroy P1 P2 P3 *
27750 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
27760 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  an entire databa
27770 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
27780 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
27790 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
277a0 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76  e.** file is giv
277b0 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  en by P1..**.** 
277c0 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
277d0 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20  destroyed is in 
277e0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
277f0 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e  e file if P3==0.
27800 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68    If.** P3==1 th
27810 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  en the table to 
27820 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  be clear is in t
27830 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
27840 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68  abase file.** th
27850 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  at is used to st
27860 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74  ore tables creat
27870 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  e using CREATE T
27880 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a  EMPORARY TABLE..
27890 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  **.** If AUTOVAC
278a0 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74  UUM is enabled t
278b0 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62  hen it is possib
278c0 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20  le that another 
278d0 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67  root page.** mig
278e0 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f  ht be moved into
278f0 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74   the newly delet
27900 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  ed root page in 
27910 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c  order to keep al
27920 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20  l.** root pages 
27930 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68  contiguous at th
27940 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
27950 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
27960 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75  e former.** valu
27970 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61  e of the root pa
27980 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20  ge that moved - 
27990 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65  its value before
279a0 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72   the move occurr
279b0 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65  ed -.** is store
279c0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
279d0 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a  .  If no page .*
279e0 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72  * movement was r
279f0 65 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65  equired (because
27a00 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
27a10 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72   dropped was alr
27a20 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73  eady .** the las
27a30 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74  t one in the dat
27a40 61 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65  abase) then a ze
27a50 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
27a60 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
27a70 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
27a80 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61   disabled then a
27a90 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20   zero is stored 
27aa0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
27ab0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
27ac0 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50  Clear.*/.case OP
27ad0 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20  _Destroy: {     
27ae0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
27af0 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76  se */.  int iMov
27b00 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a  ed;.  int iCnt;.
27b10 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20    Vdbe *pVdbe;. 
27b20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73   int iDb;..  ass
27b30 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
27b40 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53  ==0 );.#ifndef S
27b50 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
27b60 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d  ALTABLE.  iCnt =
27b70 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d   0;.  for(pVdbe=
27b80 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65  db->pVdbe; pVdbe
27b90 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d  ; pVdbe = pVdbe-
27ba0 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28  >pNext){.    if(
27bb0 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56   pVdbe->magic==V
27bc0 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26  DBE_MAGIC_RUN &&
27bd0 20 70 56 64 62 65 2d 3e 62 49 73 52 65 61 64 65   pVdbe->bIsReade
27be0 72 20 0a 20 20 20 20 20 26 26 20 70 56 64 62 65  r .     && pVdbe
27bf0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32  ->inVtabMethod<2
27c00 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30   && pVdbe->pc>=0
27c10 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69   .    ){.      i
27c20 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  Cnt++;.    }.  }
27c30 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20  .#else.  iCnt = 
27c40 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3b 0a 23  db->nVdbeRead;.#
27c50 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c  endif.  pOut->fl
27c60 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
27c70 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a    if( iCnt>1 ){.
27c80 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
27c90 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65  LOCKED;.    p->e
27ca0 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f  rrorAction = OE_
27cb0 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Abort;.  }else{.
27cc0 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70      iDb = pOp->p
27cd0 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  3;.    assert( i
27ce0 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73  Cnt==1 );.    as
27cf0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
27d00 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
27d10 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65  Db) );.    iMove
27d20 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  d = 0;  /* Not n
27d30 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20  eeded.  Only to 
27d40 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
27d50 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  g. */.    rc = s
27d60 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54  qlite3BtreeDropT
27d70 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62  able(db->aDb[iDb
27d80 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
27d90 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f  &iMoved);.    pO
27da0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
27db0 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
27dc0 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66  .i = iMoved;.#if
27dd0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27de0 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20  _AUTOVACUUM.    
27df0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
27e00 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29  K && iMoved!=0 )
27e10 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
27e20 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c  ootPageMoved(db,
27e30 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f   iDb, iMoved, pO
27e40 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a  p->p1);.      /*
27e50 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20   All OP_Destroy 
27e60 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72  operations occur
27e70 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72   on the same btr
27e80 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  ee */.      asse
27e90 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  rt( resetSchemaO
27ea0 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73  nFault==0 || res
27eb0 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d  etSchemaOnFault=
27ec0 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20  =iDb+1 );.      
27ed0 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
27ee0 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20  lt = iDb+1;.    
27ef0 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
27f00 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
27f10 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20  de: Clear P1 P2 
27f20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  P3.**.** Delete 
27f30 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  all contents of 
27f40 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
27f50 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
27f60 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69  e root page.** i
27f70 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
27f80 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
27f90 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65  P1.  But, unlike
27fa0 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74   Destroy, do not
27fb0 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74  .** remove the t
27fc0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72  able or index fr
27fd0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
27fe0 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  file..**.** The 
27ff0 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
28000 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  r is in the main
28010 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
28020 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P2==0.  If.** 
28030 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P2==1 then the t
28040 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
28050 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
28060 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
28070 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
28080 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
28090 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
280a0 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
280b0 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
280c0 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   the P3 value is
280d0 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
280e0 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72  the table referr
280f0 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e  ed to must be an
28100 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65  .** intkey table
28110 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20   (an SQL table, 
28120 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49  not an index). I
28130 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
28140 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63  row change .** c
28150 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
28160 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
28170 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
28180 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
28190 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20  ared. .** If P3 
281a0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
281b0 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76  zero, then the v
281c0 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72  alue stored in r
281d0 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a  egister P3 is.**
281e0 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65   also incremente
281f0 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
28200 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
28210 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
28220 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
28230 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63  so: Destroy.*/.c
28240 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a  ase OP_Clear: {.
28250 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20    int nChange;. 
28260 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  .  nChange = 0;.
28270 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
28280 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73  dOnly==0 );.  as
28290 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
282a0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
282b0 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20  Op->p2) );.  rc 
282c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
282d0 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20  earTable(.      
282e0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d  db->aDb[pOp->p2]
282f0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28  .pBt, pOp->p1, (
28300 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e  pOp->p3 ? &nChan
28310 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69  ge : 0).  );.  i
28320 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
28330 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20    p->nChange += 
28340 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28  nChange;.    if(
28350 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
28360 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
28370 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
28380 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
28390 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
283a0 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
283b0 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b  3]);.      aMem[
283c0 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20  pOp->p3].u.i += 
283d0 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20  nChange;.    }. 
283e0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
283f0 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53  * Opcode: ResetS
28400 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a  orter P1 * * * *
28410 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c  .**.** Delete al
28420 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20  l contents from 
28430 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61  the ephemeral ta
28440 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a  ble or sorter.**
28450 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e   that is open on
28460 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a   cursor P1..**.*
28470 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e  * This opcode on
28480 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72  ly works for cur
28490 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f  sors used for so
284a0 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65  rting and.** ope
284b0 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e  ned with OP_Open
284c0 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f  Ephemeral or OP_
284d0 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63  SorterOpen..*/.c
284e0 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74  ase OP_ResetSort
284f0 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  er: {.  VdbeCurs
28500 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65  or *pC;. .  asse
28510 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
28520 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
28530 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
28540 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
28550 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
28560 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70  0 );.  if( pC->p
28570 53 6f 72 74 65 72 20 29 7b 0a 20 20 20 20 73 71  Sorter ){.    sq
28580 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
28590 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 70 53 6f  eset(db, pC->pSo
285a0 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  rter);.  }else{.
285b0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
285c0 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20  isEphemeral );. 
285d0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
285e0 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66  treeClearTableOf
285f0 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73  Cursor(pC->pCurs
28600 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  or);.  }.  break
28610 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28620 43 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50  CreateTable P1 P
28630 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
28640 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20  sis: r[P2]=root 
28650 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c  iDb=P1.**.** All
28660 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  ocate a new tabl
28670 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  e in the main da
28680 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
28690 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
286a0 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
286b0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
286c0 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
286d0 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
286e0 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
286f0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
28700 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
28710 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
28720 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a  egister P2.**.**
28730 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
28740 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20  between a table 
28750 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20  and an index is 
28760 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d  this:  A table m
28770 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d  ust.** have a 4-
28780 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79  byte integer key
28790 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72   and can have ar
287a0 62 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41  bitrary data.  A
287b0 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61  n index.** has a
287c0 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20  n arbitrary key 
287d0 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a  but no data..**.
287e0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65  ** See also: Cre
287f0 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f  ateIndex.*/./* O
28800 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64  pcode: CreateInd
28810 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ex P1 P2 * * *.*
28820 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
28830 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a  ]=root iDb=P1.**
28840 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
28850 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20  ew index in the 
28860 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
28870 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
28880 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
28890 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
288a0 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
288b0 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
288c0 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
288d0 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
288e0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
288f0 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
28900 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
28910 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63  2..**.** See doc
28920 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50  umentation on OP
28930 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72  _CreateTable for
28940 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
28950 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
28960 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a   OP_CreateIndex:
28970 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
28980 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
28990 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65  /.case OP_Create
289a0 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  Table: {        
289b0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
289c0 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67  ease */.  int pg
289d0 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b  no;.  int flags;
289e0 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70  .  Db *pDb;..  p
289f0 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  gno = 0;.  asser
28a00 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
28a10 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
28a20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
28a30 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
28a40 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
28a50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
28a60 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
28a70 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
28a80 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
28a90 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
28aa0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
28ab0 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54  code==OP_CreateT
28ac0 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66  able ){.    /* f
28ad0 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54  lags = BTREE_INT
28ae0 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67  KEY; */.    flag
28af0 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
28b00 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66  ;.  }else{.    f
28b10 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f  lags = BTREE_BLO
28b20 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  BKEY;.  }.  rc =
28b30 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
28b40 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42  ateTable(pDb->pB
28b50 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29  t, &pgno, flags)
28b60 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
28b70 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pgno;.  break;.}
28b80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
28b90 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20  seSchema P1 * * 
28ba0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20  P4 *.**.** Read 
28bb0 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e  and parse all en
28bc0 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53  tries from the S
28bd0 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62  QLITE_MASTER tab
28be0 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  le of database P
28bf0 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20  1.** that match 
28c00 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
28c10 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4. .**.** This
28c20 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
28c30 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72  the parser to cr
28c40 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75  eate a new virtu
28c50 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74  al machine,.** t
28c60 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77  hen runs the new
28c70 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
28c80 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20  .  It is thus a 
28c90 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64  re-entrant opcod
28ca0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  e..*/.case OP_Pa
28cb0 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69  rseSchema: {.  i
28cc0 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20  nt iDb;.  const 
28cd0 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20  char *zMaster;. 
28ce0 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49   char *zSql;.  I
28cf0 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61  nitData initData
28d00 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70  ;..  /* Any prep
28d10 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74  ared statement t
28d20 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73  hat invokes this
28d30 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c   opcode will hol
28d40 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f  d mutexes.  ** o
28d50 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e 20 20  n every btree.  
28d60 54 68 69 73 20 69 73 20 61 20 70 72 65 72 65 71  This is a prereq
28d70 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b  uisite for invok
28d80 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65  ing .  ** sqlite
28d90 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e  3InitCallback().
28da0 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  .  */.#ifdef SQL
28db0 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28  ITE_DEBUG.  for(
28dc0 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e  iDb=0; iDb<db->n
28dd0 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20  Db; iDb++){.    
28de0 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c  assert( iDb==1 |
28df0 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f  | sqlite3BtreeHo
28e00 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62  ldsMutex(db->aDb
28e10 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20  [iDb].pBt) );.  
28e20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20  }.#endif..  iDb 
28e30 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
28e40 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
28e50 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
28e60 61 73 73 65 72 74 28 20 44 62 48 61 73 50 72 6f  assert( DbHasPro
28e70 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44  perty(db, iDb, D
28e80 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20  B_SchemaLoaded) 
28e90 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20  );.  /* Used to 
28ea0 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c  be a conditional
28eb0 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65   */ {.    zMaste
28ec0 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  r = SCHEMA_TABLE
28ed0 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44  (iDb);.    initD
28ee0 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20  ata.db = db;.   
28ef0 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20   initData.iDb = 
28f00 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69  pOp->p1;.    ini
28f10 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d  tData.pzErrMsg =
28f20 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20   &p->zErrMsg;.  
28f30 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
28f40 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20  MPrintf(db,.    
28f50 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c     "SELECT name,
28f60 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46   rootpage, sql F
28f70 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52  ROM '%q'.%s WHER
28f80 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f  E %s ORDER BY ro
28f90 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d  wid",.       db-
28fa0 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c  >aDb[iDb].zName,
28fb0 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70   zMaster, pOp->p
28fc0 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53  4.z);.    if( zS
28fd0 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  ql==0 ){.      r
28fe0 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
28ff0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
29000 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69     assert( db->i
29010 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20  nit.busy==0 );. 
29020 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
29030 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e  sy = 1;.      in
29040 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49  itData.rc = SQLI
29050 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73  TE_OK;.      ass
29060 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63  ert( !db->malloc
29070 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20  Failed );.      
29080 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
29090 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69  c(db, zSql, sqli
290a0 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c  te3InitCallback,
290b0 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a   &initData, 0);.
290c0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
290d0 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69  LITE_OK ) rc = i
290e0 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20  nitData.rc;.    
290f0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
29100 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  db, zSql);.     
29110 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
29120 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
29130 69 66 28 20 72 63 20 29 20 73 71 6c 69 74 65 33  if( rc ) sqlite3
29140 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
29150 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
29160 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
29170 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67  E_NOMEM ){.    g
29180 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
29190 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69    break;  .}..#i
291a0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
291b0 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a  E_OMIT_ANALYZE).
291c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41  /* Opcode: LoadA
291d0 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a  nalysis P1 * * *
291e0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68   *.**.** Read th
291f0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
29200 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  able for databas
29210 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68  e P1 and load th
29220 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20  e content.** of 
29230 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20  that table into 
29240 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64  the internal ind
29250 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ex hash table.  
29260 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a  This will cause.
29270 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  ** the analysis 
29280 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
29290 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75  preparing all su
292a0 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73  bsequent queries
292b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61  ..*/.case OP_Loa
292c0 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61  dAnalysis: {.  a
292d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
292e0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
292f0 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73  >nDb );.  rc = s
29300 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
29310 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ad(db, pOp->p1);
29320 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
29330 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
29340 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
29350 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  LYZE) */../* Opc
29360 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50  ode: DropTable P
29370 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
29380 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
29390 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
293a0 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
293b0 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
293c0 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  * the table name
293d0 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
293e0 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
293f0 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62  lled after a tab
29400 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  le.** is dropped
29410 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
29420 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
29430 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74  code) in order t
29440 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69  o keep .** the i
29450 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
29460 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
29470 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
29480 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
29490 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
294a0 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b   OP_DropTable: {
294b0 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
294c0 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64  AndDeleteTable(d
294d0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
294e0 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
294f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
29500 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20  ropIndex P1 * * 
29510 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
29520 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
29530 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
29540 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
29550 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
29560 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69  index named P4 i
29570 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
29580 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
29590 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a  fter an index.**
295a0 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
295b0 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
295c0 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
295d0 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  .** in order to 
295e0 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
295f0 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
29600 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
29610 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
29620 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
29630 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
29640 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c  opIndex: {.  sql
29650 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
29660 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70  eteIndex(db, pOp
29670 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
29680 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
29690 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69   Opcode: DropTri
296a0 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a  gger P1 * * P4 *
296b0 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
296c0 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
296d0 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
296e0 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
296f0 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67  ribe.** the trig
29700 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ger named P4 in 
29710 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
29720 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
29730 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20  er a trigger.** 
29740 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
29750 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
29760 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
29770 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
29780 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
29790 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
297a0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
297b0 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
297c0 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
297d0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
297e0 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73  opTrigger: {.  s
297f0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
29800 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62 2c  eleteTrigger(db,
29810 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
29820 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
29830 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
29840 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
29850 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65  _CHECK./* Opcode
29860 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31  : IntegrityCk P1
29870 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
29880 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73  * Do an analysis
29890 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c   of the currentl
298a0 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e  y open database.
298b0 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65    Store in.** re
298c0 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74 65  gister P1 the te
298d0 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d  xt of an error m
298e0 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69 6e  essage describin
298f0 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a  g any problems..
29900 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d  ** If no problem
29910 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f  s are found, sto
29920 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67  re a NULL in reg
29930 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
29940 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33 20  The register P3 
29950 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78  contains the max
29960 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61  imum number of a
29970 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a  llowed errors..*
29980 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33  * At most reg(P3
29990 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65  ) errors will be
299a0 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e   reported..** In
299b0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
299c0 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73  e analysis stops
299d0 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28   as soon as reg(
299e0 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a  P1) errors are .
299f0 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31  ** seen.  Reg(P1
29a00 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  ) is updated wit
29a10 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  h the number of 
29a20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
29a30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74  ..**.** The root
29a40 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66   page numbers of
29a50 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74   all tables in t
29a60 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20  he database are 
29a70 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65  integer.** store
29a80 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65  d in reg(P1), re
29a90 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b  g(P1+1), reg(P1+
29aa0 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20  2), ....  There 
29ab0 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a  are P2 tables.**
29ac0 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66   total..**.** If
29ad0 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P5 is not zero,
29ae0 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f   the check is do
29af0 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69  ne on the auxili
29b00 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ary database.** 
29b10 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61  file, not the ma
29b20 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
29b30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
29b40 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69  ode is used to i
29b50 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74  mplement the int
29b60 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61  egrity_check pra
29b70 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  gma..*/.case OP_
29b80 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20  IntegrityCk: {. 
29b90 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20   int nRoot;     
29ba0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
29bb0 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20  bles to check.  
29bc0 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20  (Number of root 
29bd0 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74  pages.) */.  int
29be0 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20   *aRoot;     /* 
29bf0 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67  Array of rootpag
29c00 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61  e numbers for ta
29c10 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b  bles to be check
29c20 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20  ed */.  int j;  
29c30 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
29c40 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
29c50 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20   nErr;       /* 
29c60 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
29c70 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63   reported */.  c
29c80 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f  har *z;        /
29c90 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65 72  * Text of the er
29ca0 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20  ror report */.  
29cb0 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20  Mem *pnErr;     
29cc0 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65 70  /* Register keep
29cd0 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72  ing track of err
29ce0 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f  ors remaining */
29cf0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
29d00 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52  IsReader );.  nR
29d10 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  oot = pOp->p2;. 
29d20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30   assert( nRoot>0
29d30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71   );.  aRoot = sq
29d40 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
29d50 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29  (db, sizeof(int)
29d60 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20  *(nRoot+1) );.  
29d70 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67  if( aRoot==0 ) g
29d80 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73  oto no_mem;.  as
29d90 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
29da0 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
29db0 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
29dc0 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61   );.  pnErr = &a
29dd0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
29de0 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
29df0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
29e00 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
29e10 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
29e20 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
29e30 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  ob))==0 );.  pIn
29e40 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
29e50 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a  1];.  for(j=0; j
29e60 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20  <nRoot; j++){.  
29e70 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e    aRoot[j] = (in
29e80 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  t)sqlite3VdbeInt
29e90 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b  Value(&pIn1[j]);
29ea0 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20  .  }.  aRoot[j] 
29eb0 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
29ec0 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29  Op->p5<db->nDb )
29ed0 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
29ee0 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
29ef0 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b  ask, pOp->p5) );
29f00 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74  .  z = sqlite3Bt
29f10 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
29f20 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  k(db->aDb[pOp->p
29f30 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e  5].pBt, aRoot, n
29f40 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20  Root,.          
29f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f60 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72         (int)pnEr
29f70 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a  r->u.i, &nErr);.
29f80 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
29f90 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e  db, aRoot);.  pn
29fa0 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
29fb0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
29fc0 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
29fd0 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29  .  if( nErr==0 )
29fe0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d  {.    assert( z=
29ff0 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  =0 );.  }else if
2a000 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ( z==0 ){.    go
2a010 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c  to no_mem;.  }el
2a020 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
2a030 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
2a040 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
2a050 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
2a060 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
2a070 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
2a080 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
2a090 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2a0a0 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
2a0b0 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
2a0c0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2a0d0 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
2a0e0 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
2a0f0 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
2a100 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2a110 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74 28 50  opsis:  rowset(P
2a120 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49  1)=r[P2].**.** I
2a130 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65  nsert the intege
2a140 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20  r value held by 
2a150 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f  register P2 into
2a160 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78   a boolean index
2a170 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69  .** held in regi
2a180 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41  ster P1..**.** A
2a190 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c  n assertion fail
2a1a0 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61  s if P2 is not a
2a1b0 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61  n integer..*/.ca
2a1c0 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a  se OP_RowSetAdd:
2a1d0 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c   {       /* in1,
2a1e0 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in2 */.  pIn1 =
2a1f0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2a200 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
2a210 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
2a220 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
2a230 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
2a240 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
2a250 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2a260 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
2a270 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
2a280 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
2a290 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2a2a0 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2a2b0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
2a2c0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f  .  }.  sqlite3Ro
2a2d0 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
2a2e0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32  >u.pRowSet, pIn2
2a2f0 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b  ->u.i);.  break;
2a300 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
2a310 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20  owSetRead P1 P2 
2a320 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
2a330 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65  is:  r[P3]=rowse
2a340 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72  t(P1).**.** Extr
2a350 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
2a360 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c   value from bool
2a370 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64  ean index P1 and
2a380 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
2a390 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
2a3a0 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f   P3.  Or, if boo
2a3b0 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73  lean index P1 is
2a3c0 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
2a3d0 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
2a3e0 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
2a3f0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
2a400 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
2a410 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
2a420 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
2a430 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76   out3 */.  i64 v
2a440 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  al;..  pIn1 = &a
2a450 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2a460 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2a470 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2a480 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  0 .   || sqlite3
2a490 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d  RowSetNext(pIn1-
2a4a0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c  >u.pRowSet, &val
2a4b0 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a  )==0.  ){.    /*
2a4c0 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64   The boolean ind
2a4d0 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20  ex is empty */. 
2a4e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2a4f0 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
2a500 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2a510 20 2d 20 31 3b 0a 20 20 20 20 56 64 62 65 42 72   - 1;.    VdbeBr
2a520 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a  anchTaken(1,2);.
2a530 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
2a540 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c  A value was pull
2a550 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65  ed from the inde
2a560 78 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  x */.    sqlite3
2a570 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
2a580 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20  &aMem[pOp->p3], 
2a590 76 61 6c 29 3b 0a 20 20 20 20 56 64 62 65 42 72  val);.    VdbeBr
2a5a0 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a  anchTaken(0,2);.
2a5b0 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
2a5c0 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
2a5d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
2a5e0 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50  wSetTest P1 P2 P
2a5f0 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
2a600 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f  : if r[P3] in ro
2a610 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32  wset(P1) goto P2
2a620 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
2a630 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  P3 is assumed to
2a640 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69   hold a 64-bit i
2a650 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66  nteger value. If
2a660 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
2a670 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65  contains a RowSe
2a680 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61  t object and tha
2a690 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  t RowSet object 
2a6a0 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20  contains.** the 
2a6b0 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33  value held in P3
2a6c0 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74  , jump to regist
2a6d0 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  er P2. Otherwise
2a6e0 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20  , insert the.** 
2a6f0 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e  integer in P3 in
2a700 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e  to the RowSet an
2a710 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f  d continue on to
2a720 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63   the.** next opc
2a730 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52  ode..**.** The R
2a740 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20  owSet object is 
2a750 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68  optimized for th
2a760 65 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63  e case where suc
2a770 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20  cessive sets.** 
2a780 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65  of integers, whe
2a790 72 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74  re each set cont
2a7a0 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74  ains no duplicat
2a7b0 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20  es. Each set.** 
2a7c0 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65  of values is ide
2a7d0 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69  ntified by a uni
2a7e0 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68  que P4 value. Th
2a7f0 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d  e first set.** m
2a800 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20  ust have P4==0, 
2a810 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34  the final set P4
2a820 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65  =-1.  P4 must be
2a830 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a   either -1 or.**
2a840 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20   non-negative.  
2a850 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  For non-negative
2a860 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e   values of P4 on
2a870 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a  ly the lower 4.*
2a880 2a 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69  * bits are signi
2a890 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  ficant..**.** Th
2a8a0 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69  is allows optimi
2a8b0 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65  zations: (a) whe
2a8c0 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73  n P4==0 there is
2a8d0 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74   no need to test
2a8e0 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f  .** the rowset o
2a8f0 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73  bject for P3, as
2a900 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
2a910 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e  d not to contain
2a920 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e   it,.** (b) when
2a930 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73   P4==-1 there is
2a940 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65   no need to inse
2a950 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73  rt the value, as
2a960 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65   it will.** neve
2a970 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c  r be tested for,
2a980 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20   and (c) when a 
2a990 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61  value that is pa
2a9a0 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a  rt of set X is.*
2a9b0 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72  * inserted, ther
2a9c0 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2a9d0 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66  search to see if
2a9e0 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
2a9f0 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
2aa00 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  y inserted as pa
2aa10 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c  rt of set X (onl
2aa20 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76  y if it was prev
2aa30 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74  iously.** insert
2aa40 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f  ed as part of so
2aa50 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a  me other set)..*
2aa60 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
2aa70 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Test: {         
2aa80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
2aa90 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
2aaa0 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69  .  int iSet;.  i
2aab0 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49  nt exists;..  pI
2aac0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2aad0 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
2aae0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2aaf0 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  iSet = pOp->p4.i
2ab00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
2ab10 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2ab20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72  );..  /* If ther
2ab30 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74  e is anything ot
2ab40 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65  her than a rowse
2ab50 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f  t object in memo
2ab60 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a  ry cell P1,.  **
2ab70 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61   delete it now a
2ab80 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31  nd initialize P1
2ab90 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72   with an empty r
2aba0 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28  owset.  */.  if(
2abb0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2abc0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2abd0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2abe0 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
2abf0 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  n1);.    if( (pI
2ac00 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2ac10 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74  RowSet)==0 ) got
2ac20 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20  o no_mem;.  }.. 
2ac30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
2ac40 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
2ac50 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74  ;.  assert( iSet
2ac60 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20  ==-1 || iSet>=0 
2ac70 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b  );.  if( iSet ){
2ac80 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71  .    exists = sq
2ac90 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
2aca0 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2acb0 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69   iSet, pIn3->u.i
2acc0 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
2acd0 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30  hTaken(exists!=0
2ace0 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69  ,2);.    if( exi
2acf0 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  sts ){.      pc 
2ad00 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2ad10 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2ad20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74  }.  }.  if( iSet
2ad30 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >=0 ){.    sqlit
2ad40 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
2ad50 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2ad60 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a  pIn3->u.i);.  }.
2ad70 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
2ad80 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ad90 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63  _TRIGGER../* Opc
2ada0 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20  ode: Program P1 
2adb0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
2adc0 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72  * Execute the tr
2add0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61  igger program pa
2ade0 73 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65  ssed as P4 (type
2adf0 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e   P4_SUBPROGRAM).
2ae00 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61   .**.** P1 conta
2ae10 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
2ae20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  of the memory ce
2ae30 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ll that contains
2ae40 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72   the first memor
2ae50 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e  y .** cell in an
2ae60 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73   array of values
2ae70 20 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e   used as argumen
2ae80 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72  ts to the sub-pr
2ae90 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f  ogram. P2 .** co
2aea0 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
2aeb0 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
2aec0 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
2aed0 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52   throws an IGNOR
2aee0 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20  E .** exception 
2aef0 75 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28  using the RAISE(
2af00 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69  ) function. Regi
2af10 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
2af20 20 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a   the address .**
2af30 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   of a memory cel
2af40 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70  l in this (the p
2af50 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69  arent) VM that i
2af60 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61  s used to alloca
2af70 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72  te the .** memor
2af80 79 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  y required by th
2af90 65 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75  e sub-vdbe at ru
2afa0 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  ntime..**.** P4 
2afb0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2afc0 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e  the VM containin
2afd0 67 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  g the trigger pr
2afe0 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ogram..**.** If 
2aff0 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P5 is non-zero, 
2b000 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 70  then recursive p
2b010 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f  rogram invocatio
2b020 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f  n is enabled..*/
2b030 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d  .case OP_Program
2b040 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2b050 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  mp */.  int nMem
2b060 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2b070 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
2b080 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 66 6f  ory registers fo
2b090 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  r sub-program */
2b0a0 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20  .  int nByte;   
2b0b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79             /* By
2b0c0 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73  tes of runtime s
2b0d0 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f  pace required fo
2b0e0 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  r sub-program */
2b0f0 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20  .  Mem *pRt;    
2b100 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
2b110 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61  gister to alloca
2b120 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  te runtime space
2b130 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
2b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2b150 20 55 73 65 64 20 74 6f 20 69 74 65 72 61 74 65   Used to iterate
2b160 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20   through memory 
2b170 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  cells */.  Mem *
2b180 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
2b190 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72     /* Last memor
2b1a0 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72  y cell in new ar
2b1b0 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ray */.  VdbeFra
2b1c0 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20  me *pFrame;     
2b1d0 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61   /* New vdbe fra
2b1e0 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e  me to execute in
2b1f0 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
2b200 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
2b210 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20   Sub-program to 
2b220 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69  execute */.  voi
2b230 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20  d *t;           
2b240 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64       /* Token id
2b250 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67 65  entifying trigge
2b260 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d  r */..  pProgram
2b270 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67   = pOp->p4.pProg
2b280 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d  ram;.  pRt = &aM
2b290 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
2b2a0 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
2b2b0 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f  >nOp>0 );.  .  /
2b2c0 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c 61 67  * If the p5 flag
2b2d0 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
2b2e0 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
2b2f0 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
2b300 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
2b310 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73  ed for backwards
2b320 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28   compatibility (
2b330 70 35 20 69 73 20 73 65 74 20 69 66 20 74 68 69  p5 is set if thi
2b340 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20  s sub-program.  
2b350 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74  ** is really a t
2b360 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f  rigger, not a fo
2b370 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e  reign key action
2b380 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73  , and the flag s
2b390 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61  et.  ** and clea
2b3a0 72 65 64 20 62 79 20 74 68 65 20 22 50 52 41 47  red by the "PRAG
2b3b0 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74 72 69  MA recursive_tri
2b3c0 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69  ggers" command i
2b3d0 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a  s clear)..  ** .
2b3e0 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72    ** It is recur
2b3f0 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20  sive invocation 
2b400 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61 74 20  of triggers, at 
2b410 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74  the SQL level, t
2b420 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73  hat is .  ** dis
2b430 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63  abled. In some c
2b440 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72  ases a single tr
2b450 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61  igger may genera
2b460 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  te more than one
2b470 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61   .  ** SubProgra
2b480 6d 20 28 69 66 20 74 68 65 20 74 72 69 67 67 65  m (if the trigge
2b490 72 20 6d 61 79 20 62 65 20 65 78 65 63 75 74 65  r may be execute
2b4a0 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e  d with more than
2b4b0 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a   one different .
2b4c0 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54    ** ON CONFLICT
2b4d0 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62   algorithm). Sub
2b4e0 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72  Program structur
2b4f0 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  es associated wi
2b500 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65  th a.  ** single
2b510 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76   trigger all hav
2b520 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
2b530 20 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67   for the SubProg
2b540 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20  ram.token .  ** 
2b550 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20  variable.  */.  
2b560 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
2b570 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d     t = pProgram-
2b580 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28  >token;.    for(
2b590 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
2b5a0 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46 72 61  ; pFrame && pFra
2b5b0 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46  me->token!=t; pF
2b5c0 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
2b5d0 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70  rent);.    if( p
2b5e0 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20  Frame ) break;. 
2b5f0 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72   }..  if( p->nFr
2b600 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b  ame>=db->aLimit[
2b610 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
2b620 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20  GGER_DEPTH] ){. 
2b630 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
2b640 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65  RROR;.    sqlite
2b650 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2b660 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f  ErrMsg, db, "too
2b670 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20   many levels of 
2b680 74 72 69 67 67 65 72 20 72 65 63 75 72 73 69 6f  trigger recursio
2b690 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  n");.    break;.
2b6a0 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74    }..  /* Regist
2b6b0 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74  er pRt is used t
2b6c0 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f  o store the memo
2b6d0 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73  ry required to s
2b6e0 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20  ave the state.  
2b6f0 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ** of the curren
2b700 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74  t program, and t
2b710 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
2b720 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f  ed at runtime to
2b730 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68   execute.  ** th
2b740 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2b750 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67  m. If this trigg
2b760 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65  er has been fire
2b770 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70  d before, then p
2b780 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65  Rt .  ** is alre
2b790 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f  ady allocated. O
2b7a0 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73  therwise, it mus
2b7b0 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
2b7c0 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74  .  */.  if( (pRt
2b7d0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d  ->flags&MEM_Fram
2b7e0 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  e)==0 ){.    /* 
2b7f0 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20  SubProgram.nMem 
2b800 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
2b810 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
2b820 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65  ells used by the
2b830 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d   .    ** program
2b840 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72   stored in SubPr
2b850 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65  ogram.aOp. As we
2b860 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65  ll as these, one
2b870 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63   memory.    ** c
2b880 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20  ell is required 
2b890 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20  for each cursor 
2b8a0 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
2b8b0 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20  ram. Set local. 
2b8c0 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e     ** variable n
2b8d0 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20  Mem (and later, 
2b8e0 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64  VdbeFrame.nChild
2b8f0 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c  Mem) to this val
2b900 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e  ue..    */.    n
2b910 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem = pProgram->
2b920 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d  nMem + pProgram-
2b930 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65  >nCsr;.    nByte
2b940 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66   = ROUND8(sizeof
2b950 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20  (VdbeFrame)).   
2b960 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65             + nMe
2b970 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a  m * sizeof(Mem).
2b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
2b990 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a  pProgram->nCsr *
2b9a0 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73   sizeof(VdbeCurs
2b9b0 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20  or *).          
2b9c0 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
2b9d0 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75  nOnce * sizeof(u
2b9e0 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  8);.    pFrame =
2b9f0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
2ba00 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b  Zero(db, nByte);
2ba10 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65  .    if( !pFrame
2ba20 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
2ba30 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
2ba40 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
2ba50 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20  elease(pRt);.   
2ba60 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45   pRt->flags = ME
2ba70 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74  M_Frame;.    pRt
2ba80 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72  ->u.pFrame = pFr
2ba90 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65  ame;..    pFrame
2baa0 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72  ->v = p;.    pFr
2bab0 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d  ame->nChildMem =
2bac0 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d   nMem;.    pFram
2bad0 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70  e->nChildCsr = p
2bae0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
2baf0 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20     pFrame->pc = 
2bb00 70 63 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  pc;.    pFrame->
2bb10 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
2bb20 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d      pFrame->nMem
2bb30 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20   = p->nMem;.    
2bb40 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20  pFrame->apCsr = 
2bb50 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46  p->apCsr;.    pF
2bb60 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  rame->nCursor = 
2bb70 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20  p->nCursor;.    
2bb80 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d  pFrame->aOp = p-
2bb90 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65  >aOp;.    pFrame
2bba0 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a  ->nOp = p->nOp;.
2bbb0 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65      pFrame->toke
2bbc0 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  n = pProgram->to
2bbd0 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  ken;.    pFrame-
2bbe0 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e  >aOnceFlag = p->
2bbf0 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70  aOnceFlag;.    p
2bc00 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67  Frame->nOnceFlag
2bc10 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b   = p->nOnceFlag;
2bc20 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64  ..    pEnd = &Vd
2bc30 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2bc40 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  e)[pFrame->nChil
2bc50 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70  dMem];.    for(p
2bc60 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d  Mem=VdbeFrameMem
2bc70 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d  (pFrame); pMem!=
2bc80 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20  pEnd; pMem++){. 
2bc90 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73       pMem->flags
2bca0 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
2bcb0 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62  ;.      pMem->db
2bcc0 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d   = db;.    }.  }
2bcd0 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65  else{.    pFrame
2bce0 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65   = pRt->u.pFrame
2bcf0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
2bd00 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72  rogram->nMem+pPr
2bd10 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
2bd20 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29  ame->nChildMem )
2bd30 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
2bd40 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46  rogram->nCsr==pF
2bd50 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20  rame->nChildCsr 
2bd60 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2bd70 63 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b  c==pFrame->pc );
2bd80 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d  .  }..  p->nFram
2bd90 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  e++;.  pFrame->p
2bda0 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61  Parent = p->pFra
2bdb0 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61  me;.  pFrame->la
2bdc0 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
2bdd0 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  wid;.  pFrame->n
2bde0 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
2bdf0 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  nge;.  p->nChang
2be00 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61  e = 0;.  p->pFra
2be10 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70  me = pFrame;.  p
2be20 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20  ->aMem = aMem = 
2be30 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  &VdbeFrameMem(pF
2be40 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e  rame)[-1];.  p->
2be50 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e  nMem = pFrame->n
2be60 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e  ChildMem;.  p->n
2be70 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46  Cursor = (u16)pF
2be80 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b  rame->nChildCsr;
2be90 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56  .  p->apCsr = (V
2bea0 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d  dbeCursor **)&aM
2beb0 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20  em[p->nMem+1];. 
2bec0 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20   p->aOp = aOp = 
2bed0 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20  pProgram->aOp;. 
2bee0 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72   p->nOp = pProgr
2bef0 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f  am->nOp;.  p->aO
2bf00 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29  nceFlag = (u8 *)
2bf10 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75  &p->apCsr[p->nCu
2bf20 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63  rsor];.  p->nOnc
2bf30 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d  eFlag = pProgram
2bf40 2d 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63 20 3d 20  ->nOnce;.  pc = 
2bf50 2d 31 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e  -1;.  memset(p->
2bf60 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d  aOnceFlag, 0, p-
2bf70 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20  >nOnceFlag);..  
2bf80 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2bf90 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32  ode: Param P1 P2
2bfa0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
2bfb0 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
2bfc0 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e   ever present in
2bfd0 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61   sub-programs ca
2bfe0 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a  lled via the .**
2bff0 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
2c000 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20  ruction. Copy a 
2c010 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20  value currently 
2c020 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f  stored in a memo
2c030 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74  ry .** cell of t
2c040 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65  he calling (pare
2c050 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c  nt) frame to cel
2c060 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72  l P2 in the curr
2c070 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61  ent frames .** a
2c080 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68  ddress space. Th
2c090 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
2c0a0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
2c0b0 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77  o access the new
2c0c0 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a  .* .** and old.*
2c0d0 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   values..**.** T
2c0e0 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
2c0f0 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61  e cell in the pa
2c100 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65  rent frame is de
2c110 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69  termined by addi
2c120 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ng.** the value 
2c130 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
2c140 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  nt to the value 
2c150 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
2c160 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c  nt to the.** cal
2c170 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20  ling OP_Program 
2c180 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2c190 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b  case OP_Param: {
2c1a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
2c1b0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
2c1c0 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
2c1d0 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e  rame;.  Mem *pIn
2c1e0 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e  ;.  pFrame = p->
2c1f0 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20  pFrame;.  pIn = 
2c200 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
2c210 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e  p->p1 + pFrame->
2c220 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e  aOp[pFrame->pc].
2c230 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65  p1];   .  sqlite
2c240 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
2c250 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d  opy(pOut, pIn, M
2c260 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65  EM_Ephem);.  bre
2c270 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ak;.}..#endif /*
2c280 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
2c290 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a  OMIT_TRIGGER */.
2c2a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2c2b0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2c2c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f  ./* Opcode: FkCo
2c2d0 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20  unter P1 P2 * * 
2c2e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66  *.** Synopsis: f
2c2f0 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a  kctr[P1]+=P2.**.
2c300 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22  ** Increment a "
2c310 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
2c320 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61  er" by P2 (P2 ma
2c330 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72  y be negative or
2c340 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49   positive)..** I
2c350 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
2c360 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  , the database c
2c370 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
2c380 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
2c390 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66   .** (deferred f
2c3a0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2c3b0 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69  raints). Otherwi
2c3c0 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72  se, if P1 is zer
2c3d0 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65  o, the .** state
2c3e0 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  ment counter is 
2c3f0 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d  incremented (imm
2c400 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
2c410 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
2c420 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f  .*/.case OP_FkCo
2c430 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64  unter: {.  if( d
2c440 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
2c450 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20  E_DeferFKs ){.  
2c460 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
2c470 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  mmCons += pOp->p
2c480 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  2;.  }else if( p
2c490 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62  Op->p1 ){.    db
2c4a0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
2c4b0 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
2c4c0 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43  lse{.    p->nFkC
2c4d0 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70  onstraint += pOp
2c4e0 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ->p2;.  }.  brea
2c4f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2c500 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20   FkIfZero P1 P2 
2c510 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2c520 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d  s: if fkctr[P1]=
2c530 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
2c540 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73   This opcode tes
2c550 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20  ts if a foreign 
2c560 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  key constraint-c
2c570 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
2c580 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20  tly zero..** If 
2c590 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  so, jump to inst
2c5a0 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65  ruction P2. Othe
2c5b0 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
2c5c0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2c5d0 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
2c5e0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
2c5f0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
2c600 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
2c610 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
2c620 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
2c630 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28  ter.** is zero (
2c640 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75  the one that cou
2c650 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  nts deferred con
2c660 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
2c670 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a  ns). If P1 is.**
2c680 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20   zero, the jump 
2c690 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
2c6a0 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72  statement constr
2c6b0 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
2c6c0 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61  zero.** (immedia
2c6d0 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
2c6e0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
2c6f0 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ions)..*/.case O
2c700 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20  P_FkIfZero: {   
2c710 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2c720 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
2c730 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
2c740 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72  Taken(db->nDefer
2c750 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62  redCons==0 && db
2c760 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
2c770 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  ns==0, 2);.    i
2c780 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  f( db->nDeferred
2c790 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
2c7a0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
2c7b0 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  =0 ) pc = pOp->p
2c7c0 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  2-1;.  }else{.  
2c7d0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2c7e0 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69  n(p->nFkConstrai
2c7f0 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  nt==0 && db->nDe
2c800 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
2c810 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  , 2);.    if( p-
2c820 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d  >nFkConstraint==
2c830 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
2c840 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70  edImmCons==0 ) p
2c850 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
2c860 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2c870 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20  ndif /* #ifndef 
2c880 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
2c890 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e  IGN_KEY */..#ifn
2c8a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c8b0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a  AUTOINCREMENT./*
2c8c0 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20   Opcode: MemMax 
2c8d0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2c8e0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d  ynopsis: r[P1]=m
2c8f0 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a  ax(r[P1],r[P2]).
2c900 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65  **.** P1 is a re
2c910 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
2c920 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
2c930 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72   VM (the root fr
2c940 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72  ame is.** differ
2c950 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ent from the cur
2c960 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68  rent frame if th
2c970 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
2c980 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64  s being executed
2c990 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62  .** within a sub
2c9a0 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74  -program). Set t
2c9b0 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
2c9c0 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d  ster P1 to the m
2c9d0 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74  aximum of .** it
2c9e0 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  s current value 
2c9f0 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  and the value in
2ca00 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
2ca10 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
2ca20 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65  tion throws an e
2ca30 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f  rror if the memo
2ca40 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69  ry cell is not i
2ca50 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69  nitially.** an i
2ca60 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
2ca70 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20  OP_MemMax: {    
2ca80 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
2ca90 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
2caa0 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61  e;.  if( p->pFra
2cab0 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46  me ){.    for(pF
2cac0 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
2cad0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
2cae0 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
2caf0 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49  pParent);.    pI
2cb00 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  n1 = &pFrame->aM
2cb10 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d  em[pOp->p1];.  }
2cb20 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d  else{.    pIn1 =
2cb30 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2cb40 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d  .  }.  assert( m
2cb50 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20  emIsValid(pIn1) 
2cb60 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
2cb70 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
2cb80 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  n1);.  pIn2 = &a
2cb90 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2cba0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
2cbb0 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a  tegerify(pIn2);.
2cbc0 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c    if( pIn1->u.i<
2cbd0 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20  pIn2->u.i){.    
2cbe0 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32  pIn1->u.i = pIn2
2cbf0 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65  ->u.i;.  }.  bre
2cc00 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2cc10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2cc20 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a  INCREMENT */../*
2cc30 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50   Opcode: IfPos P
2cc40 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2cc50 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
2cc60 3e 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  >0 goto P2.**.**
2cc70 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66   If the value of
2cc80 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
2cc90 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 6a 75  1 or greater, ju
2cca0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
2ccb0 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f  It is illegal to
2ccc0 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75   use this instru
2ccd0 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73  ction on a regis
2cce0 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a  ter that does.**
2ccf0 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20   not contain an 
2cd00 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73  integer.  An ass
2cd10 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c  ertion fault wil
2cd20 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20  l result if you 
2cd30 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  try..*/.case OP_
2cd40 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20  IfPos: {        
2cd50 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
2cd60 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2cd70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2cd80 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
2cd90 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65  EM_Int );.  Vdbe
2cda0 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e  BranchTaken( pIn
2cdb0 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20  1->u.i>0, 2);.  
2cdc0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20  if( pIn1->u.i>0 
2cdd0 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  ){.     pc = pOp
2cde0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
2cdf0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2ce00 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32  ode: IfNeg P1 P2
2ce10 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2ce20 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50 33 2c 20  sis: r[P1]+=P3, 
2ce30 69 66 20 72 5b 50 31 5d 3c 30 20 67 6f 74 6f 20  if r[P1]<0 goto 
2ce40 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
2ce50 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
2ce60 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
2ce70 64 64 20 6c 69 74 65 72 61 6c 20 50 33 20 74 6f  dd literal P3 to
2ce80 20 74 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a   the value in.**
2ce90 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65   register P1 the
2cea0 6e 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 6f  n if the value o
2ceb0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2cec0 20 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c   less than zero,
2ced0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2f   jump to P2. .*/
2cee0 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20  .case OP_IfNeg: 
2cef0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2cf00 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
2cf10 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2cf20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
2cf30 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2cf40 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b  );.  pIn1->u.i +
2cf50 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 56 64 62  = pOp->p3;.  Vdb
2cf60 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e  eBranchTaken(pIn
2cf70 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20  1->u.i<0, 2);.  
2cf80 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20  if( pIn1->u.i<0 
2cf90 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  ){.     pc = pOp
2cfa0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
2cfb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2cfc0 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50  ode: IfZero P1 P
2cfd0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2cfe0 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50 33 2c  psis: r[P1]+=P3,
2cff0 20 69 66 20 72 5b 50 31 5d 3d 3d 30 20 67 6f 74   if r[P1]==0 got
2d000 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  o P2.**.** The r
2d010 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
2d020 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2d030 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c  er.  Add literal
2d040 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61   P3 to the.** va
2d050 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
2d060 50 31 2e 20 20 49 66 20 74 68 65 20 72 65 73 75  P1.  If the resu
2d070 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c  lt is exactly 0,
2d080 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2f   jump to P2. .*/
2d090 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a  .case OP_IfZero:
2d0a0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2d0b0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
2d0c0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2d0d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
2d0e0 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
2d0f0 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20   );.  pIn1->u.i 
2d100 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 56 64  += pOp->p3;.  Vd
2d110 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
2d120 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a  n1->u.i==0, 2);.
2d130 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d    if( pIn1->u.i=
2d140 3d 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  =0 ){.     pc = 
2d150 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2d160 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2d170 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20  Opcode: AggStep 
2d180 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
2d190 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
2d1a0 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32  =r[P3] step(r[P2
2d1b0 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63  @P5]).**.** Exec
2d1c0 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
2d1d0 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
2d1e0 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
2d1f0 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
2d200 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
2d210 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2d220 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73  the FuncDef.** s
2d230 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
2d240 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
2d250 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73  tion.  Use regis
2d260 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65  ter.** P3 as the
2d270 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
2d280 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
2d290 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
2d2a0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
2d2b0 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
2d2c0 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ssors..*/.case O
2d2d0 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69  P_AggStep: {.  i
2d2e0 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nt n;.  int i;. 
2d2f0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65   Mem *pMem;.  Me
2d300 6d 20 2a 70 52 65 63 3b 0a 20 20 4d 65 6d 20 74  m *pRec;.  Mem t
2d310 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
2d320 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74  ext ctx;.  sqlit
2d330 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c  e3_value **apVal
2d340 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35  ;..  n = pOp->p5
2d350 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30  ;.  assert( n>=0
2d360 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 26 61 4d   );.  pRec = &aM
2d370 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
2d380 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pVal = p->apArg;
2d390 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c  .  assert( apVal
2d3a0 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f   || n==0 );.  fo
2d3b0 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c  r(i=0; i<n; i++,
2d3c0 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73   pRec++){.    as
2d3d0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2d3e0 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 61 70  (pRec) );.    ap
2d3f0 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20  Val[i] = pRec;. 
2d400 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
2d410 6e 67 65 28 70 2c 20 70 52 65 63 29 3b 0a 20 20  nge(p, pRec);.  
2d420 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20  }.  ctx.pFunc = 
2d430 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20  pOp->p4.pFunc;. 
2d440 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2d450 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
2d460 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
2d470 6f 72 29 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65  or) );.  ctx.pMe
2d480 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  m = pMem = &aMem
2d490 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65  [pOp->p3];.  pMe
2d4a0 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74 65  m->n++;.  sqlite
2d4b0 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 26 74 2c  3VdbeMemInit(&t,
2d4c0 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a   db, MEM_Null);.
2d4d0 20 20 63 74 78 2e 70 4f 75 74 20 3d 20 26 74 3b    ctx.pOut = &t;
2d4e0 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
2d4f0 20 30 3b 0a 20 20 63 74 78 2e 70 56 64 62 65 20   0;.  ctx.pVdbe 
2d500 3d 20 70 3b 0a 20 20 63 74 78 2e 69 4f 70 20 3d  = p;.  ctx.iOp =
2d510 20 70 63 3b 0a 20 20 63 74 78 2e 73 6b 69 70 46   pc;.  ctx.skipF
2d520 6c 61 67 20 3d 20 30 3b 0a 20 20 28 63 74 78 2e  lag = 0;.  (ctx.
2d530 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63  pFunc->xStep)(&c
2d540 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f  tx, n, apVal); /
2d550 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32  * IMP: R-24505-2
2d560 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 63 74  3230 */.  if( ct
2d570 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  x.isError ){.   
2d580 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2d590 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2d5a0 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
2d5b0 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 74 29 29  _value_text(&t))
2d5c0 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69  ;.    rc = ctx.i
2d5d0 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 69 66  sError;.  }.  if
2d5e0 28 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 29  ( ctx.skipFlag )
2d5f0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2d600 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
2d610 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20  _CollSeq );.    
2d620 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a  i = pOp[-1].p1;.
2d630 20 20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69      if( i ) sqli
2d640 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
2d650 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b  64(&aMem[i], 1);
2d660 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
2d670 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 74 29  beMemRelease(&t)
2d680 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2d690 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61   Opcode: AggFina
2d6a0 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  l P1 P2 * P4 *.*
2d6b0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75  * Synopsis: accu
2d6c0 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a  m=r[P1] N=P2.**.
2d6d0 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66  ** Execute the f
2d6e0 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f  inalizer functio
2d6f0 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
2d700 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68  te.  P1 is.** th
2d710 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
2d720 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63  n that is the ac
2d730 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68  cumulator for th
2d740 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a  e aggregate..**.
2d750 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
2d760 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
2d770 20 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66   that the step f
2d780 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e  unction takes an
2d790 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  d.** P4 is a poi
2d7a0 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
2d7b0 44 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e  Def for this fun
2d7c0 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a  ction.  The P2.*
2d7d0 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f  * argument is no
2d7e0 74 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f  t used by this o
2d7f0 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e  pcode.  It is on
2d800 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61  ly there to disa
2d810 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63  mbiguate.** func
2d820 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74  tions that can t
2d830 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62  ake varying numb
2d840 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ers of arguments
2d850 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67  .  The.** P4 arg
2d860 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65  ument is only ne
2d870 65 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67  eded for the deg
2d880 65 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65  enerate case whe
2d890 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66  re.** the step f
2d8a0 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20  unction was not 
2d8b0 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65  previously calle
2d8c0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  d..*/.case OP_Ag
2d8d0 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20  gFinal: {.  Mem 
2d8e0 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28  *pMem;.  assert(
2d8f0 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
2d900 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p1<=(p->nMem-
2d910 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
2d920 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
2d930 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2d940 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
2d950 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f   ~(MEM_Null|MEM_
2d960 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63  Agg))==0 );.  rc
2d970 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
2d980 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20  mFinalize(pMem, 
2d990 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a  pOp->p4.pFunc);.
2d9a0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
2d9b0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2d9c0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2d9d0 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
2d9e0 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29  value_text(pMem)
2d9f0 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
2da00 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2da10 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e  ng(pMem, encodin
2da20 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  g);.  UPDATE_MAX
2da30 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b  _BLOBSIZE(pMem);
2da40 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
2da50 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d  beMemTooBig(pMem
2da60 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
2da70 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65  o_big;.  }.  bre
2da80 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
2da90 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f  QLITE_OMIT_WAL./
2daa0 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70  * Opcode: Checkp
2dab0 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20  oint P1 P2 P3 * 
2dac0 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69  *.**.** Checkpoi
2dad0 6e 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  nt database P1. 
2dae0 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20  This is a no-op 
2daf0 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72  if P1 is not cur
2db00 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c  rently in.** WAL
2db10 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72   mode. Parameter
2db20 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51   P2 is one of SQ
2db30 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2db40 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 0a 2a 2a  PASSIVE, FULL.**
2db50 20 6f 72 20 52 45 53 54 41 52 54 2e 20 20 57 72   or RESTART.  Wr
2db60 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20  ite 1 or 0 into 
2db70 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63  mem[P3] if the c
2db80 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e  heckpoint return
2db90 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  s.** SQLITE_BUSY
2dba0 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74   or not, respect
2dbb0 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68  ively.  Write th
2dbc0 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
2dbd0 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20  s in the.** WAL 
2dbe0 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
2dbf0 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  oint into mem[P3
2dc00 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62  +1] and the numb
2dc10 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69  er of pages.** i
2dc20 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68  n the WAL that h
2dc30 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f  ave been checkpo
2dc40 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20  inted after the 
2dc50 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f  checkpoint.** co
2dc60 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d  mpletes into mem
2dc70 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72  [P3+2].  However
2dc80 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65   on an error, me
2dc90 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d  m[P3+1] and.** m
2dca0 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69  em[P3+2] are ini
2dcb0 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a  tialized to -1..
2dcc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b  */.case OP_Check
2dcd0 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69  point: {.  int i
2dce0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2dcf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
2dd00 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
2dd10 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20  int aRes[3];    
2dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd30 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20  /* Results */.  
2dd40 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
2dd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd60 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73  /* Write results
2dd70 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65   here */..  asse
2dd80 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2dd90 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20  =0 );.  aRes[0] 
2dda0 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d  = 0;.  aRes[1] =
2ddb0 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20   aRes[2] = -1;. 
2ddc0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
2ddd0 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2dde0 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20  INT_PASSIVE.    
2ddf0 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53     || pOp->p2==S
2de00 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
2de10 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20  _FULL.       || 
2de20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2de30 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41  CHECKPOINT_RESTA
2de40 52 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73  RT.  );.  rc = s
2de50 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
2de60 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2de70 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c  p->p2, &aRes[1],
2de80 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66   &aRes[2]);.  if
2de90 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
2dea0 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  Y ){.    rc = SQ
2deb0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65  LITE_OK;.    aRe
2dec0 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  s[0] = 1;.  }.  
2ded0 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20  for(i=0, pMem = 
2dee0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20  &aMem[pOp->p3]; 
2def0 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b  i<3; i++, pMem++
2df00 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2df10 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d  beMemSetInt64(pM
2df20 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d  em, (i64)aRes[i]
2df30 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65  );.  }    .  bre
2df40 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a  ak;.};  .#endif.
2df50 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2df60 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f  OMIT_PRAGMA./* O
2df70 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f  pcode: JournalMo
2df80 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
2df90 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65  **.** Change the
2dfa0 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66   journal mode of
2dfb0 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
2dfc0 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f  P3. P3 must be o
2dfd0 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47  ne of the.** PAG
2dfe0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58  ER_JOURNALMODE_X
2dff0 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68  XX values. If ch
2e000 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74  anging between t
2e010 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62  he various rollb
2e020 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65  ack.** modes (de
2e030 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20  lete, truncate, 
2e040 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64  persist, off and
2e050 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69   memory), this i
2e060 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70  s a simple.** op
2e070 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69  eration. No IO i
2e080 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a  s required..**.*
2e090 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e  * If changing in
2e0a0 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c  to or out of WAL
2e0b0 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64   mode the proced
2e0c0 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70  ure is more comp
2e0d0 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57  licated..**.** W
2e0e0 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f  rite a string co
2e0f0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e  ntaining the fin
2e100 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20  al journal-mode 
2e110 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
2e120 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e  */.case OP_Journ
2e130 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20  alMode: {    /* 
2e140 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
2e150 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
2e160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e170 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f       /* Btree to
2e180 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20   change journal 
2e190 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67  mode of */.  Pag
2e1a0 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20  er *pPager;     
2e1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2e1c0 50 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64  Pager associated
2e1d0 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69   with pBt */.  i
2e1e0 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20  nt eNew;        
2e1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2e200 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f  * New journal mo
2e210 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64  de */.  int eOld
2e220 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2e230 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
2e240 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ld journal mode 
2e250 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2e260 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e  E_OMIT_WAL.  con
2e270 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
2e280 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
2e290 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
2e2a0 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72   file for pPager
2e2b0 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 65 4e   */.#endif..  eN
2e2c0 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ew = pOp->p3;.  
2e2d0 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41  assert( eNew==PA
2e2e0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2e2f0 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c  DELETE .       |
2e300 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2e310 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41  URNALMODE_TRUNCA
2e320 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
2e330 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2e340 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20  LMODE_PERSIST . 
2e350 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2e360 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2e370 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65  _OFF.       || e
2e380 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2e390 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20  ALMODE_MEMORY.  
2e3a0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2e3b0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2e3c0 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  WAL.       || eN
2e3d0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2e3e0 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b  LMODE_QUERY.  );
2e3f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2e400 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2e410 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2e420 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
2e430 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d  y==0 );..  pBt =
2e440 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
2e450 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20  ].pBt;.  pPager 
2e460 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
2e470 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64  ger(pBt);.  eOld
2e480 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 47   = sqlite3PagerG
2e490 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
2e4a0 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65  ager);.  if( eNe
2e4b0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2e4c0 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65  MODE_QUERY ) eNe
2e4d0 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20  w = eOld;.  if( 
2e4e0 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54  !sqlite3PagerOkT
2e4f0 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f  oChangeJournalMo
2e500 64 65 28 70 50 61 67 65 72 29 20 29 20 65 4e 65  de(pPager) ) eNe
2e510 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64  w = eOld;..#ifnd
2e520 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
2e530 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d  AL.  zFilename =
2e540 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c   sqlite3PagerFil
2e550 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29  ename(pPager, 1)
2e560 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61  ;..  /* Do not a
2e570 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f  llow a transitio
2e580 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  n to journal_mod
2e590 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61  e=WAL for a data
2e5a0 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d  base.  ** in tem
2e5b0 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f  porary storage o
2e5c0 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65  r if the VFS doe
2e5d0 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68  s not support sh
2e5e0 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a  ared memory .  *
2e5f0 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41  /.  if( eNew==PA
2e600 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2e610 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74  WAL.   && (sqlit
2e620 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65  e3Strlen30(zFile
2e630 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20  name)==0        
2e640 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20     /* Temp file 
2e650 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71  */.       || !sq
2e660 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75 70  lite3PagerWalSup
2e670 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29 20  ported(pPager)) 
2e680 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d    /* No shared-m
2e690 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f  emory support */
2e6a0 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d  .  ){.    eNew =
2e6b0 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66   eOld;.  }..  if
2e6c0 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20  ( (eNew!=eOld). 
2e6d0 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45    && (eOld==PAGE
2e6e0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2e6f0 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52  L || eNew==PAGER
2e700 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2e710 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21  ).  ){.    if( !
2e720 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c  db->autoCommit |
2e730 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e  | db->nVdbeRead>
2e740 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  1 ){.      rc = 
2e750 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
2e760 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2e770 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2e780 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20  , db, .         
2e790 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20   "cannot change 
2e7a0 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d  %s wal mode from
2e7b0 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
2e7c0 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20  ction",.        
2e7d0 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a    (eNew==PAGER_J
2e7e0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
2e7f0 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f   "into" : "out o
2e800 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  f").      );.   
2e810 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65     break;.    }e
2e820 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28  lse{. .      if(
2e830 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
2e840 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a  RNALMODE_WAL ){.
2e850 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65          /* If le
2e860 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20  aving WAL mode, 
2e870 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69  close the log fi
2e880 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75  le. If successfu
2e890 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20  l, the call.    
2e8a0 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43      ** to PagerC
2e8b0 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70  loseWal() checkp
2e8c0 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65  oints and delete
2e8d0 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61  s the write-ahea
2e8e0 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a  d-log .        *
2e8f0 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55  * file. An EXCLU
2e900 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74  SIVE lock may st
2e910 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74  ill be held on t
2e920 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2e930 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74   .        ** aft
2e940 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20  er a successful 
2e950 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20  return. .       
2e960 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d   */.        rc =
2e970 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f   sqlite3PagerClo
2e980 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20  seWal(pPager);. 
2e990 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53         if( rc==S
2e9a0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2e9b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
2e9c0 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
2e9d0 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
2e9e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2e9f0 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d  }else if( eOld==
2ea00 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2ea10 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20  E_MEMORY ){.    
2ea20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72      /* Cannot tr
2ea30 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c  ansition directl
2ea40 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f  y from MEMORY to
2ea50 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20   WAL.  Use mode 
2ea60 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  OFF.        ** a
2ea70 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74  s an intermediat
2ea80 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c  e */.        sql
2ea90 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
2eaa0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
2eab0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2eac0 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a  E_OFF);.      }.
2ead0 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e    .      /* Open
2eae0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
2eaf0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
2eb00 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20  ile. Regardless 
2eb10 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20  of the journal. 
2eb20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68       ** mode, th
2eb30 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  is transaction a
2eb40 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c  lways uses a rol
2eb50 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20  lback journal.. 
2eb60 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
2eb70 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
2eb80 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29  eeIsInTrans(pBt)
2eb90 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ==0 );.      if(
2eba0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2ebb0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
2ebc0 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65  qlite3BtreeSetVe
2ebd0 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77  rsion(pBt, (eNew
2ebe0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2ebf0 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29  ODE_WAL ? 2 : 1)
2ec00 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
2ec10 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69  .  }.#endif /* i
2ec20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2ec30 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20  T_WAL */..  if( 
2ec40 72 63 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d  rc ){.    eNew =
2ec50 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65   eOld;.  }.  eNe
2ec60 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  w = sqlite3Pager
2ec70 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
2ec80 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20  Pager, eNew);.. 
2ec90 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
2eca0 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e  p->p2];.  pOut->
2ecb0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
2ecc0 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
2ecd0 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
2ece0 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
2ecf0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
2ed00 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  eNew);.  pOut->n
2ed10 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
2ed20 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70  30(pOut->z);.  p
2ed30 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
2ed40 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65  E_UTF8;.  sqlite
2ed50 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2ed60 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
2ed70 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  ng);.  break;.};
2ed80 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2ed90 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f  E_OMIT_PRAGMA */
2eda0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2edb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55  QLITE_OMIT_VACUU
2edc0 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  M) && !defined(S
2edd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43  QLITE_OMIT_ATTAC
2ede0 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  H)./* Opcode: Va
2edf0 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  cuum * * * * *.*
2ee00 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20  *.** Vacuum the 
2ee10 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e  entire database.
2ee20 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69    This opcode wi
2ee30 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76  ll cause other v
2ee40 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e  irtual.** machin
2ee50 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64  es to be created
2ee60 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61   and run.  It ma
2ee70 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20  y not be called 
2ee80 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61  from within.** a
2ee90 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f   transaction..*/
2eea0 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a  .case OP_Vacuum:
2eeb0 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   {.  assert( p->
2eec0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2eed0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
2eee0 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
2eef0 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b  sg, db);.  break
2ef00 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ;.}.#endif..#if 
2ef10 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2ef20 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
2ef30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72  ./* Opcode: Incr
2ef40 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a  Vacuum P1 P2 * *
2ef50 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d   *.**.** Perform
2ef60 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f   a single step o
2ef70 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61  f the incrementa
2ef80 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75  l vacuum procedu
2ef90 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20  re on.** the P1 
2efa0 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
2efb0 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69   vacuum has fini
2efc0 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  shed, jump to in
2efd0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e  struction.** P2.
2efe0 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
2eff0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2f000 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2f010 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63  ..*/.case OP_Inc
2f020 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20  rVacuum: {      
2f030 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42    /* jump */.  B
2f040 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
2f050 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2f060 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
2f070 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
2f080 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
2f090 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
2f0a0 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
2f0b0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2f0c0 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
2f0d0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
2f0e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2f0f0 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42  reeIncrVacuum(pB
2f100 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  t);.  VdbeBranch
2f110 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45  Taken(rc==SQLITE
2f120 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20  _DONE,2);.  if( 
2f130 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
2f140 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
2f150 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20  >p2 - 1;.    rc 
2f160 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  = SQLITE_OK;.  }
2f170 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2f180 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  if../* Opcode: E
2f190 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a  xpire P1 * * * *
2f1a0 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65  .**.** Cause pre
2f1b0 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65  compiled stateme
2f1c0 6e 74 73 20 74 6f 20 65 78 70 69 72 65 2e 20 20  nts to expire.  
2f1d0 57 68 65 6e 20 61 6e 20 65 78 70 69 72 65 64 20  When an expired 
2f1e0 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20  statement.** is 
2f1f0 65 78 65 63 75 74 65 64 20 75 73 69 6e 67 20 73  executed using s
2f200 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 74  qlite3_step() it
2f210 20 77 69 6c 6c 20 65 69 74 68 65 72 20 61 75 74   will either aut
2f220 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65  omatically.** re
2f230 70 72 65 70 61 72 65 20 69 74 73 65 6c 66 20 28  prepare itself (
2f240 69 66 20 69 74 20 77 61 73 20 6f 72 69 67 69 6e  if it was origin
2f250 61 6c 6c 79 20 63 72 65 61 74 65 64 20 75 73 69  ally created usi
2f260 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  ng sqlite3_prepa
2f270 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69  re_v2()).** or i
2f280 74 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  t will fail with
2f290 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a   SQLITE_SCHEMA..
2f2a0 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  ** .** If P1 is 
2f2b0 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20  0, then all SQL 
2f2c0 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d  statements becom
2f2d0 65 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31  e expired. If P1
2f2e0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a   is non-zero,.**
2f2f0 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63   then only the c
2f300 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
2f310 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ng statement is 
2f320 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65  expired..*/.case
2f330 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20   OP_Expire: {.  
2f340 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a  if( !pOp->p1 ){.
2f350 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
2f360 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
2f370 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65  nts(db);.  }else
2f380 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  {.    p->expired
2f390 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
2f3a0 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
2f3b0 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
2f3c0 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65  _CACHE./* Opcode
2f3d0 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50  : TableLock P1 P
2f3e0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
2f3f0 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f  opsis: iDb=P1 ro
2f400 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a  ot=P2 write=P3.*
2f410 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f  *.** Obtain a lo
2f420 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c  ck on a particul
2f430 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69  ar table. This i
2f440 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e  nstruction is on
2f450 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20  ly used when.** 
2f460 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
2f470 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
2f480 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69  led. .**.** P1 i
2f490 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
2f4a0 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73  he database in s
2f4b0 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
2f4c0 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
2f4d0 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63  on which the loc
2f4e0 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20  k is acquired.  
2f4f0 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62  A readlock is ob
2f500 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20  tained if P3==0 
2f510 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f  or.** a write lo
2f520 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a  ck if P3==1..**.
2f530 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74  ** P2 contains t
2f540 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20  he root-page of 
2f550 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63  the table to loc
2f560 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74  k..**.** P4 cont
2f570 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ains a pointer t
2f580 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  o the name of th
2f590 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f  e table being lo
2f5a0 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e  cked. This is on
2f5b0 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65  ly.** used to ge
2f5c0 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20  nerate an error 
2f5d0 6d 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c  message if the l
2f5e0 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62  ock cannot be ob
2f5f0 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  tained..*/.case 
2f600 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a  OP_TableLock: {.
2f610 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b    u8 isWriteLock
2f620 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a   = (u8)pOp->p3;.
2f630 20 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63    if( isWriteLoc
2f640 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61  k || 0==(db->fla
2f650 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  gs&SQLITE_ReadUn
2f660 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20  committed) ){.  
2f670 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e    int p1 = pOp->
2f680 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28  p1; .    assert(
2f690 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d   p1>=0 && p1<db-
2f6a0 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65  >nDb );.    asse
2f6b0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2f6c0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 31 29  ->btreeMask, p1)
2f6d0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2f6e0 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c  isWriteLock==0 |
2f6f0 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31  | isWriteLock==1
2f700 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
2f710 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62  ite3BtreeLockTab
2f720 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70  le(db->aDb[p1].p
2f730 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57  Bt, pOp->p2, isW
2f740 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69  riteLock);.    i
2f750 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51  f( (rc&0xFF)==SQ
2f760 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20  LITE_LOCKED ){. 
2f770 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
2f780 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  *z = pOp->p4.z;.
2f790 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
2f7a0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2f7b0 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73  sg, db, "databas
2f7c0 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65  e table is locke
2f7d0 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20  d: %s", z);.    
2f7e0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
2f7f0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2f800 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2f810 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  CHE */..#ifndef 
2f820 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2f830 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2f840 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a  de: VBegin * * *
2f850 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d   P4 *.**.** P4 m
2f860 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20  ay be a pointer 
2f870 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  to an sqlite3_vt
2f880 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66  ab structure. If
2f890 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a   so, call the .*
2f8a0 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20  * xBegin method 
2f8b0 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
2f8c0 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74  **.** Also, whet
2f8d0 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73  her or not P4 is
2f8e0 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74   set, check that
2f8f0 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69   this is not bei
2f900 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a  ng called from.*
2f910 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62  * within a callb
2f920 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ack to a virtual
2f930 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d   table xSync() m
2f940 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c  ethod. If it is,
2f950 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f   the error.** co
2f960 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74  de will be set t
2f970 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e  o SQLITE_LOCKED.
2f980 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67  .*/.case OP_VBeg
2f990 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a  in: {.  VTable *
2f9a0 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d  pVTab;.  pVTab =
2f9b0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a   pOp->p4.pVtab;.
2f9c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
2f9d0 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61  abBegin(db, pVTa
2f9e0 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20  b);.  if( pVTab 
2f9f0 29 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  ) sqlite3VtabImp
2fa00 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54  ortErrmsg(p, pVT
2fa10 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72  ab->pVtab);.  br
2fa20 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2fa30 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2fa40 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2fa50 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2fa60 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2fa70 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74  * Opcode: VCreat
2fa80 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
2fa90 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61  .** P4 is the na
2faa0 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
2fab0 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
2fac0 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78  e P1. Call the x
2fad0 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a  Create method.**
2fae0 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
2faf0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65  .*/.case OP_VCre
2fb00 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71  ate: {.  rc = sq
2fb10 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
2fb20 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ate(db, pOp->p1,
2fb30 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e   pOp->p4.z, &p->
2fb40 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61  zErrMsg);.  brea
2fb50 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2fb60 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2fb70 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2fb80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2fb90 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2fba0 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79  Opcode: VDestroy
2fbb0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2fbc0 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
2fbd0 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
2fbe0 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
2fbf0 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78   P1.  Call the x
2fc00 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a  Destroy method.*
2fc10 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e  * of that table.
2fc20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73  .*/.case OP_VDes
2fc30 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56  troy: {.  p->inV
2fc40 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20  tabMethod = 2;. 
2fc50 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
2fc60 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c  bCallDestroy(db,
2fc70 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2fc80 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  4.z);.  p->inVta
2fc90 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62  bMethod = 0;.  b
2fca0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2fcb0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2fcc0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2fcd0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2fce0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2fcf0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e  /* Opcode: VOpen
2fd00 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2fd10 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2fd20 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
2fd30 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
2fd40 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2fd50 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69  ructure..** P1 i
2fd60 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  s a cursor numbe
2fd70 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  r.  This opcode 
2fd80 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74  opens a cursor t
2fd90 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  o the virtual.**
2fda0 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65   table and store
2fdb0 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e  s that cursor in
2fdc0 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
2fdd0 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  VOpen: {.  VdbeC
2fde0 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73  ursor *pCur;.  s
2fdf0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2fe00 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
2fe10 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2fe20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65  *pVtab;.  sqlite
2fe30 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
2fe40 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  e;..  assert( p-
2fe50 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
2fe60 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61  pCur = 0;.  pVta
2fe70 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70  bCursor = 0;.  p
2fe80 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
2fe90 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
2fea0 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65  Module = (sqlite
2feb0 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62  3_module *)pVtab
2fec0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
2fed0 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f  ert(pVtab && pMo
2fee0 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20 70 4d  dule);.  rc = pM
2fef0 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74  odule->xOpen(pVt
2ff00 61 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72  ab, &pVtabCursor
2ff10 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
2ff20 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
2ff30 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53 51  pVtab);.  if( SQ
2ff40 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20  LITE_OK==rc ){. 
2ff50 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65     /* Initialize
2ff60 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
2ff70 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20  rsor base class 
2ff80 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72 73  */.    pVtabCurs
2ff90 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61  or->pVtab = pVta
2ffa0 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69  b;..    /* Initi
2ffb0 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f  alize vdbe curso
2ffc0 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20  r object */.    
2ffd0 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
2ffe0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
2fff0 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20  , 0, -1, 0);.   
30000 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20   if( pCur ){.   
30010 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75     pCur->pVtabCu
30020 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73  rsor = pVtabCurs
30030 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  or;.    }else{. 
30040 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46       db->mallocF
30050 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20  ailed = 1;.     
30060 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65   pModule->xClose
30070 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  (pVtabCursor);. 
30080 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
30090 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
300a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
300b0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
300c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
300d0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
300e0 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50  pcode: VFilter P
300f0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
30100 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61 6e 3d  Synopsis: iplan=
30110 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50 34 27  r[P3] zplan='P4'
30120 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  .**.** P1 is a c
30130 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69  ursor opened usi
30140 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73  ng VOpen.  P2 is
30150 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a   an address to j
30160 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65  ump to if.** the
30170 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74   filtered result
30180 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a   set is empty..*
30190 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65  *.** P4 is eithe
301a0 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69  r NULL or a stri
301b0 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65  ng that was gene
301c0 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65  rated by the xBe
301d0 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f  stIndex.** metho
301e0 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
301f0 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61    The interpreta
30200 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73  tion of the P4 s
30210 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a  tring is left.**
30220 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69   to the module i
30230 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a  mplementation..*
30240 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
30250 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69   invokes the xFi
30260 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74  lter method on t
30270 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
30280 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79   specified.** by
30290 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65   P1.  The intege
302a0 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72  r query plan par
302b0 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65  ameter to xFilte
302c0 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  r is stored in r
302d0 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52  egister.** P3. R
302e0 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f  egister P3+1 sto
302f0 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72  res the argc par
30300 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73  ameter to be pas
30310 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46  sed to the.** xF
30320 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65  ilter method. Re
30330 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33  gisters P3+2..P3
30340 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20  +1+argc are the 
30350 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e  argc.** addition
30360 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68  al parameters wh
30370 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74  ich are passed t
30380 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20  o.** xFilter as 
30390 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50  argv. Register P
303a0 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76  3+2 becomes argv
303b0 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20  [0] when passed 
303c0 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a  to xFilter..**.*
303d0 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  * A jump is made
303e0 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65   to P2 if the re
303f0 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66  sult set after f
30400 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62  iltering would b
30410 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65  e empty..*/.case
30420 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20   OP_VFilter: {  
30430 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
30440 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51  t nArg;.  int iQ
30450 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71  uery;.  const sq
30460 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
30470 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51  odule;.  Mem *pQ
30480 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  uery;.  Mem *pAr
30490 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  gc;.  sqlite3_vt
304a0 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
304b0 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
304c0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
304d0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
304e0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
304f0 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61  int i;.  Mem **a
30500 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20  pArg;..  pQuery 
30510 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
30520 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75  ;.  pArgc = &pQu
30530 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d  ery[1];.  pCur =
30540 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
30550 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65  1];.  assert( me
30560 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29  mIsValid(pQuery)
30570 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
30580 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51  RACE(pOp->p3, pQ
30590 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28  uery);.  assert(
305a0 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
305b0 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72  or );.  pVtabCur
305c0 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  sor = pCur->pVta
305d0 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62  bCursor;.  pVtab
305e0 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e   = pVtabCursor->
305f0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
30600 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
30610 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68  e;..  /* Grab th
30620 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61  e index number a
30630 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  nd argc paramete
30640 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  rs */.  assert( 
30650 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d  (pQuery->flags&M
30660 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41  EM_Int)!=0 && pA
30670 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  rgc->flags==MEM_
30680 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20  Int );.  nArg = 
30690 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b  (int)pArgc->u.i;
306a0 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74  .  iQuery = (int
306b0 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20  )pQuery->u.i;.. 
306c0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
306d0 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f  Filter method */
306e0 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30  .  {.    res = 0
306f0 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d  ;.    apArg = p-
30700 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28  >apArg;.    for(
30710 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69  i = 0; i<nArg; i
30720 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67  ++){.      apArg
30730 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31  [i] = &pArgc[i+1
30740 5d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d  ];.    }..    p-
30750 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
30760 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  1;.    rc = pMod
30770 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74  ule->xFilter(pVt
30780 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79  abCursor, iQuery
30790 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72  , pOp->p4.z, nAr
307a0 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20 70  g, apArg);.    p
307b0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
307c0 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   0;.    sqlite3V
307d0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
307e0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69  p, pVtab);.    i
307f0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
30800 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
30810 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56  pModule->xEof(pV
30820 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  tabCursor);.    
30830 7d 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  }.    VdbeBranch
30840 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
30850 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a  .    if( res ){.
30860 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
30870 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  p2 - 1;.    }.  
30880 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  }.  pCur->nullRo
30890 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b  w = 0;..  break;
308a0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
308b0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
308c0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
308d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
308e0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
308f0 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31  code: VColumn P1
30900 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
30910 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76 63  nopsis: r[P3]=vc
30920 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20  olumn(P2).**.** 
30930 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20  Store the value 
30940 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  of the P2-th col
30950 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f  umn of.** the ro
30960 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  w of the virtual
30970 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20  -table that the 
30980 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73  .** P1 cursor is
30990 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74   pointing to int
309a0 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
309b0 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d  /.case OP_VColum
309c0 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  n: {.  sqlite3_v
309d0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
309e0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
309f0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
30a00 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c  em *pDest;.  sql
30a10 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f  ite3_context sCo
30a20 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75  ntext;..  VdbeCu
30a30 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e  rsor *pCur = p->
30a40 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
30a50 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
30a60 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
30a70 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
30a80 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
30a90 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
30aa0 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d  or) );.  pDest =
30ab0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
30ac0 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
30ad0 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20  nge(p, pDest);. 
30ae0 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
30af0 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ow ){.    sqlite
30b00 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
30b10 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61  pDest);.    brea
30b20 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
30b30 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
30b40 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  or->pVtab;.  pMo
30b50 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
30b60 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
30b70 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d   pModule->xColum
30b80 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73  n );.  memset(&s
30b90 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65  Context, 0, size
30ba0 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 20  of(sContext));. 
30bb0 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75 74 20 3d   sContext.pOut =
30bc0 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d 53 65 74   pDest;.  MemSet
30bd0 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20  TypeFlag(pDest, 
30be0 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72 63 20  MEM_Null);.  rc 
30bf0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  = pModule->xColu
30c00 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  mn(pCur->pVtabCu
30c10 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c  rsor, &sContext,
30c20 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c   pOp->p2);.  sql
30c30 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
30c40 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
30c50 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69    if( sContext.i
30c60 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63  sError ){.    rc
30c70 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72   = sContext.isEr
30c80 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ror;.  }.  sqlit
30c90 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
30ca0 64 69 6e 67 28 70 44 65 73 74 2c 20 65 6e 63 6f  ding(pDest, enco
30cb0 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45  ding);.  REGISTE
30cc0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
30cd0 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54   pDest);.  UPDAT
30ce0 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
30cf0 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71  Dest);..  if( sq
30d00 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
30d10 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20  ig(pDest) ){.   
30d20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
30d30 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
30d40 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
30d50 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
30d60 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
30d70 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
30d80 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
30d90 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a   VNext P1 P2 * *
30da0 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65   *.**.** Advance
30db0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50   virtual table P
30dc0 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  1 to the next ro
30dd0 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20  w in its result 
30de0 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20  set and.** jump 
30df0 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
30e00 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76  2.  Or, if the v
30e10 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73  irtual table has
30e20 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20   reached.** the 
30e30 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c  end of its resul
30e40 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c  t set, then fall
30e50 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
30e60 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
30e70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65  ..*/.case OP_VNe
30e80 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  xt: {   /* jump 
30e90 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
30ea0 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
30eb0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
30ec0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
30ed0 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73   res;.  VdbeCurs
30ee0 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73  or *pCur;..  res
30ef0 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70   = 0;.  pCur = p
30f00 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
30f10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
30f20 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
30f30 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
30f40 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61  lRow ){.    brea
30f50 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
30f60 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
30f70 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  or->pVtab;.  pMo
30f80 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
30f90 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
30fa0 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20   pModule->xNext 
30fb0 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  );..  /* Invoke 
30fc0 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68  the xNext() meth
30fd0 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
30fe0 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61  . There is no wa
30ff0 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75  y for the.  ** u
31000 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d  nderlying implem
31010 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75  entation to retu
31020 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f  rn an error if o
31030 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67  ne occurs during
31040 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49  .  ** xNext(). I
31050 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72  nstead, if an er
31060 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65  ror occurs, true
31070 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e   is returned (in
31080 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20  dicating that . 
31090 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69   ** data is avai
310a0 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65  lable) and the e
310b0 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e  rror code return
310c0 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20  ed when xColumn 
310d0 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68  or.  ** some oth
310e0 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78  er method is nex
310f0 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65  t invoked on the
31100 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61   save virtual ta
31110 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f  ble cursor..  */
31120 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
31130 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70  od = 1;.  rc = p
31140 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43  Module->xNext(pC
31150 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29  ur->pVtabCursor)
31160 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  ;.  p->inVtabMet
31170 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  hod = 0;.  sqlit
31180 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
31190 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
311a0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
311b0 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70  K ){.    res = p
311c0 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75  Module->xEof(pCu
311d0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b  r->pVtabCursor);
311e0 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
311f0 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a  hTaken(!res,2);.
31200 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20    if( !res ){.  
31210 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
31220 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50   data, jump to P
31230 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f  2 */.    pc = pO
31240 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
31250 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
31260 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e  interrupt;.}.#en
31270 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
31280 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
31290 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
312a0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
312b0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
312c0 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50  VRename P1 * * P
312d0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
312e0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
312f0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
31300 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
31310 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
31320 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
31330 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
31340 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65  sponding xRename
31350 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c   method. The val
31360 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65  ue.** in registe
31370 72 20 50 31 20 69 73 20 70 61 73 73 65 64 20 61  r P1 is passed a
31380 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75  s the zName argu
31390 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e  ment to the xRen
313a0 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63  ame method..*/.c
313b0 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20  ase OP_VRename: 
313c0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
313d0 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a   *pVtab;.  Mem *
313e0 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20  pName;..  pVtab 
313f0 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
31400 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20  >pVtab;.  pName 
31410 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
31420 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61  ;.  assert( pVta
31430 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
31440 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ame );.  assert(
31450 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d   memIsValid(pNam
31460 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  e) );.  assert( 
31470 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
31480 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
31490 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d  CE(pOp->p1, pNam
314a0 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e  e);.  assert( pN
314b0 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ame->flags & MEM
314c0 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74 63 61  _Str );.  testca
314d0 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
314e0 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20  SQLITE_UTF8 );. 
314f0 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
31500 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
31510 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73 74 63  F16BE );.  testc
31520 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
31530 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20  =SQLITE_UTF16LE 
31540 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
31550 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
31560 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54  ing(pName, SQLIT
31570 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 72  E_UTF8);.  if( r
31580 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
31590 20 20 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e      rc = pVtab->
315a0 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
315b0 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a  (pVtab, pName->z
315c0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  );.    sqlite3Vt
315d0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
315e0 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 70 2d  , pVtab);.    p-
315f0 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
31600 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
31610 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
31620 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
31630 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
31640 20 56 55 70 64 61 74 65 20 50 31 20 50 32 20 50   VUpdate P1 P2 P
31650 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
31660 73 69 73 3a 20 64 61 74 61 3d 72 5b 50 33 40 50  sis: data=r[P3@P
31670 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  2].**.** P4 is a
31680 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
31690 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
316a0 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
316b0 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
316c0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
316d0 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73  vokes the corres
316e0 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20  ponding xUpdate 
316f0 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65  method. P2 value
31700 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75  s.** are contigu
31710 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73  ous memory cells
31720 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33 20   starting at P3 
31730 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 78  to pass to the x
31740 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63  Update .** invoc
31750 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65  ation. The value
31760 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50 33   in register (P3
31770 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e  +P2-1) correspon
31780 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32  ds to the .** p2
31790 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  th element of th
317a0 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61 73  e argv array pas
317b0 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a  sed to xUpdate..
317c0 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74  **.** The xUpdat
317d0 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f  e method will do
317e0 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20   a DELETE or an 
317f0 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a  INSERT or both..
31800 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65  ** The argv[0] e
31810 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f  lement (which co
31820 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d  rresponds to mem
31830 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20  ory cell P3).** 
31840 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
31850 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
31860 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20    If argv[0] is 
31870 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a  NULL then no .**
31880 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73   deletion occurs
31890 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65  .  The argv[1] e
318a0 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f  lement is the ro
318b0 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a  wid of the new .
318c0 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61  ** row.  This ca
318d0 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76  n be NULL to hav
318e0 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  e the virtual ta
318f0 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e  ble select the n
31900 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72  ew .** rowid for
31910 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75   itself.  The su
31920 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74  bsequent element
31930 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20 61  s in the array a
31940 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  re .** the value
31950 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  s of columns in 
31960 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a  the new row..**.
31970 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e  ** If P2==1 then
31980 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65   no insert is pe
31990 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30  rformed.  argv[0
319a0 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  ] is the rowid o
319b0 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65  f.** a row to de
319c0 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  lete..**.** P1 i
319d0 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67  s a boolean flag
319e0 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20 74  . If it is set t
319f0 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20 78  o true and the x
31a00 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69  Update call.** i
31a10 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68  s successful, th
31a20 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65 74  en the value ret
31a30 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
31a40 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
31a50 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20  id() .** is set 
31a60 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
31a70 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68  the rowid for th
31a80 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72  e row just inser
31a90 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73  ted..**.** P5 is
31aa0 20 74 68 65 20 65 72 72 6f 72 20 61 63 74 69 6f   the error actio
31ab0 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20  ns (OE_Replace, 
31ac0 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f  OE_Fail, OE_Igno
31ad0 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61  re, etc) to.** a
31ae0 70 70 6c 79 20 69 6e 20 74 68 65 20 63 61 73 65  pply in the case
31af0 20 6f 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74   of a constraint
31b00 20 66 61 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69   failure on an i
31b10 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74 65 2e  nsert or update.
31b20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64  .*/.case OP_VUpd
31b30 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ate: {.  sqlite3
31b40 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
31b50 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
31b60 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e  pModule;.  int n
31b70 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Arg;.  int i;.  
31b80 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77  sqlite_int64 row
31b90 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72  id;.  Mem **apAr
31ba0 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20  g;.  Mem *pX;.. 
31bb0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
31bc0 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70 4f  ==1        || pO
31bd0 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20  p->p5==OE_Fail  
31be0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
31bf0 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20 20  Rollback .      
31c00 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
31c10 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35  Abort || pOp->p5
31c20 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70  ==OE_Ignore || p
31c30 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61  Op->p5==OE_Repla
31c40 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74  ce.  );.  assert
31c50 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
31c60 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f   );.  pVtab = pO
31c70 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
31c80 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
31c90 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  (sqlite3_module 
31ca0 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  *)pVtab->pModule
31cb0 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e  ;.  nArg = pOp->
31cc0 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
31cd0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54  p->p4type==P4_VT
31ce0 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  AB );.  if( ALWA
31cf0 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64  YS(pModule->xUpd
31d00 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38 20 76  ate) ){.    u8 v
31d10 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20  tabOnConflict = 
31d20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  db->vtabOnConfli
31d30 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20  ct;.    apArg = 
31d40 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58  p->apArg;.    pX
31d50 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
31d60 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  ];.    for(i=0; 
31d70 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
31d80 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
31d90 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20 20  sValid(pX) );.  
31da0 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
31db0 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20 20  ange(p, pX);.   
31dc0 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58     apArg[i] = pX
31dd0 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20  ;.      pX++;.  
31de0 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61 62    }.    db->vtab
31df0 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70  OnConflict = pOp
31e00 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d 20 70  ->p5;.    rc = p
31e10 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28  Module->xUpdate(
31e20 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41  pVtab, nArg, apA
31e30 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  rg, &rowid);.   
31e40 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
31e50 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66  ict = vtabOnConf
31e60 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  lict;.    sqlite
31e70 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
31e80 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
31e90 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
31ea0 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b  OK && pOp->p1 ){
31eb0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e  .      assert( n
31ec0 41 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30  Arg>1 && apArg[0
31ed0 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e  ] && (apArg[0]->
31ee0 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20  flags&MEM_Null) 
31ef0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73  );.      db->las
31f00 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
31f10 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  id = rowid;.    
31f20 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78  }.    if( (rc&0x
31f30 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  ff)==SQLITE_CONS
31f40 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70  TRAINT && pOp->p
31f50 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72  4.pVtab->bConstr
31f60 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66  aint ){.      if
31f70 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67  ( pOp->p5==OE_Ig
31f80 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20  nore ){.        
31f90 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
31fa0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
31fb0 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74       p->errorAct
31fc0 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d  ion = ((pOp->p5=
31fd0 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f  =OE_Replace) ? O
31fe0 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70  E_Abort : pOp->p
31ff0 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  5);.      }.    
32000 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e  }else{.      p->
32010 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d  nChange++;.    }
32020 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
32030 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
32040 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
32050 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20  LE */..#ifndef  
32060 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
32070 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63  R_PRAGMAS./* Opc
32080 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50  ode: Pagecount P
32090 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
320a0 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
320b0 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  nt number of pag
320c0 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  es in database P
320d0 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 to memory cell
320e0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
320f0 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20  Pagecount: {    
32100 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
32110 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
32120 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69  pOut->u.i = sqli
32130 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65  te3BtreeLastPage
32140 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  (db->aDb[pOp->p1
32150 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b  ].pBt);.  break;
32160 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  .}.#endif...#ifn
32170 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
32180 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
32190 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63  * Opcode: MaxPgc
321a0 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
321b0 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74  **.** Try to set
321c0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
321d0 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61  e count for data
321e0 62 61 73 65 20 50 31 20 74 6f 20 74 68 65 20 76  base P1 to the v
321f0 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44  alue in P3..** D
32200 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61  o not let the ma
32210 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
32220 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20   fall below the 
32230 63 75 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75  current page cou
32240 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74  nt and.** do not
32250 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69   change the maxi
32260 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76  mum page count v
32270 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a  alue if P3==0..*
32280 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d  *.** Store the m
32290 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
322a0 74 20 61 66 74 65 72 20 74 68 65 20 63 68 61 6e  t after the chan
322b0 67 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ge in register P
322c0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  2..*/.case OP_Ma
322d0 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20  xPgcnt: {       
322e0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
322f0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73  release */.  uns
32300 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78  igned int newMax
32310 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  ;.  Btree *pBt;.
32320 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
32330 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
32340 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69   newMax = 0;.  i
32350 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
32360 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74    newMax = sqlit
32370 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28  e3BtreeLastPage(
32380 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65  pBt);.    if( ne
32390 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64  wMax < (unsigned
323a0 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61  )pOp->p3 ) newMa
323b0 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f  x = (unsigned)pO
323c0 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75  p->p3;.  }.  pOu
323d0 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33  t->u.i = sqlite3
323e0 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e  BtreeMaxPageCoun
323f0 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a  t(pBt, newMax);.
32400 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
32410 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  f.../* Opcode: I
32420 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  nit * P2 * P4 *.
32430 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 53 74  ** Synopsis:  St
32440 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20  art at P2.**.** 
32450 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e  Programs contain
32460 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e   a single instan
32470 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  ce of this opcod
32480 65 20 61 73 20 74 68 65 20 76 65 72 79 20 66 69  e as the very fi
32490 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a  rst.** opcode..*
324a0 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20  *.** If tracing 
324b0 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74  is enabled (by t
324c0 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65  he sqlite3_trace
324d0 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74  ()) interface, t
324e0 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38  hen.** the UTF-8
324f0 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65   string containe
32500 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74  d in P4 is emitt
32510 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20  ed on the trace 
32520 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20  callback..** Or 
32530 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20  if P4 is blank, 
32540 75 73 65 20 74 68 65 20 73 74 72 69 6e 67 20 72  use the string r
32550 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
32560 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20  e3_sql()..**.** 
32570 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  If P2 is not zer
32580 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
32590 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
325a0 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20  se OP_Init: {   
325b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
325c0 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65  /.  char *zTrace
325d0 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20  ;.  char *z;..  
325e0 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b 0a 20  if( pOp->p2 ){. 
325f0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
32600 2d 20 31 3b 0a 20 20 7d 0a 23 69 66 6e 64 65 66  - 1;.  }.#ifndef
32610 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
32620 43 45 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72  CE.  if( db->xTr
32630 61 63 65 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f  ace.   && !p->do
32640 69 6e 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28  ingRerun.   && (
32650 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
32660 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
32670 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20  : p->zSql))!=0. 
32680 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69   ){.    z = sqli
32690 74 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c  te3VdbeExpandSql
326a0 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20  (p, zTrace);.   
326b0 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e   db->xTrace(db->
326c0 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20  pTraceArg, z);. 
326d0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
326e0 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66  (db, z);.  }.#if
326f0 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 46  def SQLITE_USE_F
32700 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72  CNTL_TRACE.  zTr
32710 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a  ace = (pOp->p4.z
32720 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70   ? pOp->p4.z : p
32730 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a  ->zSql);.  if( z
32740 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69 6e 74  Trace ){.    int
32750 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   i;.    for(i=0;
32760 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
32770 7b 0a 20 20 20 20 20 20 69 66 28 20 44 62 4d 61  {.      if( DbMa
32780 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
32790 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20 63 6f 6e  ask, i)==0 ) con
327a0 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c  tinue;.      sql
327b0 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
327c0 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d  l(db, db->aDb[i]
327d0 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46  .zName, SQLITE_F
327e0 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61  CNTL_TRACE, zTra
327f0 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  ce);.    }.  }.#
32800 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
32810 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20  USE_FCNTL_TRACE 
32820 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
32830 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28 64 62  _DEBUG.  if( (db
32840 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
32850 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20  _SqlTrace)!=0.  
32860 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70   && (zTrace = (p
32870 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
32880 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29  p4.z : p->zSql))
32890 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c  !=0.  ){.    sql
328a0 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
328b0 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e  "SQL-trace: %s\n
328c0 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a  ", zTrace);.  }.
328d0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
328e0 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66  _DEBUG */.#endif
328f0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
32900 54 52 41 43 45 20 2a 2f 0a 20 20 62 72 65 61 6b  TRACE */.  break
32910 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
32920 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a   Noop * * * * *.
32930 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67  **.** Do nothing
32940 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  .  This instruct
32950 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65  ion is often use
32960 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a  ful as a jump.**
32970 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f   destination..*/
32980 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63  ./*.** The magic
32990 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20   Explain opcode 
329a0 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65  are only inserte
329b0 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d  d when explain==
329c0 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74  2 (which.** is t
329d0 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45  o say when the E
329e0 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
329f0 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64  N syntax is used
32a00 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  .).** This opcod
32a10 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d  e records inform
32a20 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f  ation from the o
32a30 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73  ptimizer.  It is
32a40 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65   the.** the same
32a50 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68   as a no-op.  Th
32a60 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20  is opcodesnever 
32a70 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65 61  appears in a rea
32a80 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f  l VM program..*/
32a90 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20  .default: {     
32aa0 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20       /* This is 
32ab0 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61  really OP_Noop a
32ac0 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f  nd OP_Explain */
32ad0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
32ae0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20  opcode==OP_Noop 
32af0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
32b00 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20  OP_Explain );.  
32b10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a  break;.}../*****
32b20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32b30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32b40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32b50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32b60 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20  ********.** The 
32b70 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77 69  cases of the swi
32b80 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62  tch statement ab
32b90 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68  ove this line sh
32ba0 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65  ould all be inde
32bb0 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61  nted.** by 6 spa
32bc0 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65  ces.  But the le
32bd0 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73  ft-most 6 spaces
32be0 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76   have been remov
32bf0 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68  ed to improve th
32c00 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79  e.** readability
32c10 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69  .  From this poi
32c20 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20  nt on down, the 
32c30 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69  normal indentati
32c40 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20  on rules are.** 
32c50 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a  restored..******
32c60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32c70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32c80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32c90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32ca0 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a  *******/.    }..
32cb0 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
32cc0 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ILE.    {.      
32cd0 75 36 34 20 65 6e 64 54 69 6d 65 20 3d 20 73 71  u64 endTime = sq
32ce0 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 20  lite3Hwtime();. 
32cf0 20 20 20 20 20 69 66 28 20 65 6e 64 54 69 6d 65       if( endTime
32d00 3e 73 74 61 72 74 20 29 20 70 4f 70 2d 3e 63 79  >start ) pOp->cy
32d10 63 6c 65 73 20 2b 3d 20 65 6e 64 54 69 6d 65 20  cles += endTime 
32d20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70  - start;.      p
32d30 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d  Op->cnt++;.    }
32d40 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
32d50 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
32d60 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20  de adds nothing 
32d70 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75  to the actual fu
32d80 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20  nctionality.    
32d90 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  ** of the progra
32da0 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68  m.  It is only h
32db0 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ere for testing 
32dc0 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20  and debugging.. 
32dd0 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68     ** On the oth
32de0 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73  er hand, it does
32df0 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73   burn CPU cycles
32e00 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f   every time thro
32e10 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65  ugh.    ** the e
32e20 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20  valuator loop.  
32e30 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20  So we can leave 
32e40 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42  it out when NDEB
32e50 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
32e60 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44     */.#ifndef ND
32e70 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28  EBUG.    assert(
32e80 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d   pc>=-1 && pc<p-
32e90 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66 20  >nOp );..#ifdef 
32ea0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
32eb0 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
32ec0 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
32ed0 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72  e ){.      if( r
32ee0 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22 72  c!=0 ) printf("r
32ef0 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20  c=%d\n",rc);.   
32f00 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c     if( pOp->opfl
32f10 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54  ags & (OPFLG_OUT
32f20 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46  2_PRERELEASE|OPF
32f30 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20  LG_OUT2) ){.    
32f40 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
32f50 65 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  e(pOp->p2, &aMem
32f60 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
32f70 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 4f    }.      if( pO
32f80 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
32f90 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20  LG_OUT3 ){.     
32fa0 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
32fb0 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b  (pOp->p3, &aMem[
32fc0 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
32fd0 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20   }.    }.#endif 
32fe0 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
32ff0 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e   */.#endif  /* N
33000 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a  DEBUG */.  }  /*
33010 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   The end of the 
33020 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65  for(;;) loop the
33030 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f   loops through o
33040 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  pcodes */..  /* 
33050 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73  If we reach this
33060 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73   point, it means
33070 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20   that execution 
33080 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68  is finished with
33090 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f  .  ** an error o
330a0 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a  f some kind..  *
330b0 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  /.vdbe_error_hal
330c0 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20  t:.  assert( rc 
330d0 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  );.  p->rc = rc;
330e0 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c  .  testcase( sql
330f0 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
33100 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71  .xLog!=0 );.  sq
33110 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73  lite3_log(rc, "s
33120 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20  tatement aborts 
33130 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c  at %d: [%s] %s",
33140 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
33150 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71 6c       pc, p->zSql
33160 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
33170 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
33180 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  (p);.  if( rc==S
33190 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
331a0 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  M ) db->mallocFa
331b0 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  iled = 1;.  rc =
331c0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
331d0 20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d 61   if( resetSchema
331e0 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20  OnFault>0 ){.   
331f0 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
33200 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74  Schema(db, reset
33210 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29  SchemaOnFault-1)
33220 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73  ;.  }..  /* This
33230 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
33240 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f   out of this pro
33250 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65  cedure.  We have
33260 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65   to.  ** release
33270 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20   the mutexes on 
33280 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65  btrees that were
33290 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65   acquired at the
332a0 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64  .  ** top. */.vd
332b0 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d  be_return:.  db-
332c0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
332d0 74 52 6f 77 69 64 3b 0a 20 20 74 65 73 74 63 61  tRowid;.  testca
332e0 73 65 28 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b  se( nVmStep>0 );
332f0 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53  .  p->aCounter[S
33300 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
33310 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e  _VM_STEP] += (in
33320 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c  t)nVmStep;.  sql
33330 69 74 65 33 56 64 62 65 4c 65 61 76 65 28 70 29  ite3VdbeLeave(p)
33340 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a  ;.  return rc;..
33350 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
33360 65 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72  e if a string or
33370 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61   blob larger tha
33380 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  n SQLITE_MAX_LEN
33390 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f  GTH.  ** is enco
333a0 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f  untered..  */.to
333b0 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33  o_big:.  sqlite3
333c0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
333d0 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69  rrMsg, db, "stri
333e0 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62  ng or blob too b
333f0 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ig");.  rc = SQL
33400 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f  ITE_TOOBIG;.  go
33410 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
33420 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
33430 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c  o here if a mall
33440 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f  oc() fails..  */
33450 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d  .no_mem:.  db->m
33460 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
33470 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
33480 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
33490 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d   db, "out of mem
334a0 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51  ory");.  rc = SQ
334b0 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f  LITE_NOMEM;.  go
334c0 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
334d0 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
334e0 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f  o here for any o
334f0 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74  ther kind of fat
33500 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22  al error.  The "
33510 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a  rc" variable.  *
33520 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68  * should hold th
33530 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a  e error number..
33540 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
33550 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72  o_error:.  asser
33560 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30  t( p->zErrMsg==0
33570 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61   );.  if( db->ma
33580 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20  llocFailed ) rc 
33590 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
335a0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
335b0 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a  _IOERR_NOMEM ){.
335c0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
335d0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
335e0 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
335f0 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
33600 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
33610 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
33620 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
33630 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e  f the sqlite3_in
33640 74 65 72 72 75 70 74 28 29 20 41 50 49 20 73 65  terrupt() API se
33650 74 73 20 74 68 65 20 69 6e 74 65 72 72 75 70 74  ts the interrupt
33660 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f  .  ** flag..  */
33670 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e  .abort_due_to_in
33680 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72  terrupt:.  asser
33690 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  t( db->u1.isInte
336a0 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20  rrupted );.  rc 
336b0 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
336c0 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63  PT;.  p->rc = rc
336d0 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74  ;.  sqlite3SetSt
336e0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
336f0 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
33700 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
33710 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
33720 72 5f 68 61 6c 74 3b 0a 7d 0a                    r_halt;.}.