/ Hex Artifact Content
Login

Artifact 34fb6d592a9f9591f365811441b5cd81424d7f6f:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
1810: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1820: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1830: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1840: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1850: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1860: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1870: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1880: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1890: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
18a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
18b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1900: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1910: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1920: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1930: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1940: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1950: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1960: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1970: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1980: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1990: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
19a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
19b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
19c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
19d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
19e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
19f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1a00: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1a10: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1a20: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1a30: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1a40: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1a50: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1a60: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1a70: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1a80: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1a90: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1aa0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1ab0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1ac0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1ad0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1ae0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
1af0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1b00: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1b10: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1b20: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1b30: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1b40: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1b50: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1b60: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1b70: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1b80: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1b90: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1ba0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1bb0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1bc0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1bd0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1be0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1bf0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1c00: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1c10: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1c20: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1c30: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1c40: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1c50: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1c60: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1c70: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1c80: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1c90: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1ca0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1cb0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1cc0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1cd0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1ce0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1cf0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1d00: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1d10: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1d20: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1d30: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1d40: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1d50: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1d60: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1d70: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1d80: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1d90: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1da0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1db0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1dc0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1dd0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1de0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1df0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1e00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1e10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1e20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1e30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1e40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1e50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1e60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1e70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1e90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1ea0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1eb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ed0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ee0: 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
1ef0: 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79  Resize(pMem, nBy
1f00: 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70  te) ){.    p->ap
1f10: 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20  Csr[iCur] = pCx 
1f20: 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70  = (VdbeCursor*)p
1f30: 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73  Mem->z;.    mems
1f40: 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f  et(pCx, 0, sizeo
1f50: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a  f(VdbeCursor));.
1f60: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
1f70: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
1f80: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
1f90: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
1fa0: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
1fb0: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 69 73  eld];.    if( is
1fc0: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1fd0: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1fe0: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1ff0: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2000: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
2010: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
2020: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
2030: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
2040: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
2050: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
2060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2070: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2080: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2090: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
20a0: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
20b0: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
20c0: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
20d0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
20e0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
20f0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
2100: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
2110: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
2120: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2130: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2140: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2150: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2160: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2170: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2180: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2190: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
21a0: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
21b0: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
21c0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
21d0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
21e0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
21f0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
2200: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
2210: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
2220: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2230: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2240: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2250: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2260: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2270: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2280: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2290: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
22a0: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
22b0: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
22c0: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
22d0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
22e0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
22f0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2300: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2310: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2320: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2330: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2340: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2350: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2360: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2370: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2380: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2390: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
23a0: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
23b0: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
23c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
23d0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
23e0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
23f0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2400: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2410: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2420: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2430: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2440: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2450: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2460: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2470: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2480: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2490: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
24a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
24b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
24c0: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
24d0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
24e0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
24f0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2500: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2510: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2520: 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ec);.  }.}../*.*
2530: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
2540: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
2550: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
2560: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
2570: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
2580: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
2590: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
25a0: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
25b0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
25c0: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
25d0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25e0: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
25f0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
2600: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
2610: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2620: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
2630: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
2640: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
2650: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2660: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
2670: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
2680: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
2690: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
26a0: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
26b0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
26c0: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
26d0: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
26e0: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
2700: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
2710: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
2720: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
2730: 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42   SQLITE_AFF_BLOB
2740: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
2750: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
2760: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
2770: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2780: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
2790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
27a0: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
27b0: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
27c0: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
27d0: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
27e0: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
27f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
2800: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
2810: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
2820: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
2830: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
2840: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
2850: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2860: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2870: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2880: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2890: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
28a0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
28b0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
28c0: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
28d0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
28e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
28f0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2900: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
2910: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
2920: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2930: 4d 5f 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d  M_Str ) applyNum
2940: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2950: 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  c,1);.      }els
2960: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2970: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2980: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2990: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
29a0: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
29b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
29c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
29d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
29e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
29f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2a00: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2a10: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2a20: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2a30: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2a40: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2a50: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2a60: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2a70: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2a80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2a90: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
2aa0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
2ab0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
2ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ad0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2ae0: 20 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a   enc, 1);.    }.
2af0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
2b00: 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45  &= ~(MEM_Real|ME
2b10: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  M_Int);.  }.}../
2b20: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2b30: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2b40: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2b50: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2b60: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2b70: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2b80: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2b90: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2ba0: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2bb0: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2bc0: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2bd0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2be0: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2bf0: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2c00: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2c10: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2c20: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2c30: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69  e argument..*/.i
2c40: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
2c50: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
2c60: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2c70: 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20  l){.  int eType 
2c80: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
2c90: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66  type(pVal);.  if
2ca0: 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  ( eType==SQLITE_
2cb0: 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20  TEXT ){.    Mem 
2cc0: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
2cd0: 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d  al;.    applyNum
2ce0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2cf0: 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70 65  m, 0);.    eType
2d00: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
2d10: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d  _type(pVal);.  }
2d20: 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b  .  return eType;
2d30: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
2d40: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
2d50: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
2d60: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
2d70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
2d80: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
2d90: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
2da0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2db0: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2dc0: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
2dd0: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
2de0: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
2df0: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
2e00: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
2e10: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
2e20: 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d  nc);.}../*.** pM
2e30: 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c  em currently onl
2e40: 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67  y holds a string
2e50: 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65 20   type (or maybe 
2e60: 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20 63  a BLOB that we c
2e70: 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74 20  an.** interpret 
2e80: 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20 77  as a string if w
2e90: 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f 6d  e want to).  Com
2ea0: 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73 70  pute its corresp
2eb0: 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69  onding.** numeri
2ec0: 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20 6f  c type, if has o
2ed0: 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d 65  ne.  Set the pMe
2ee0: 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d  m->u.r and pMem-
2ef0: 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20 61  >u.i fields.** a
2f00: 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73  ccordingly..*/.s
2f10: 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54 45  tatic u16 SQLITE
2f20: 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75 74  _NOINLINE comput
2f30: 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d  eNumericType(Mem
2f40: 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72   *pMem){.  asser
2f50: 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
2f60: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
2f70: 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73  eal))==0 );.  as
2f80: 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
2f90: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2fa0: 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a 20  M_Blob))!=0 );. 
2fb0: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
2fc0: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
2fd0: 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.r, pMem->n, p
2fe0: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
2ff0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
3000: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  }.  if( sqlite3A
3010: 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26  toi64(pMem->z, &
3020: 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d  pMem->u.i, pMem-
3030: 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d  >n, pMem->enc)==
3040: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
3050: 20 72 65 74 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b   return MEM_Int;
3060: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 4d 45  .  }.  return ME
3070: 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  M_Real;.}../*.**
3080: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 65   Return the nume
3090: 72 69 63 20 74 79 70 65 20 66 6f 72 20 70 4d 65  ric type for pMe
30a0: 6d 2c 20 65 69 74 68 65 72 20 4d 45 4d 5f 49 6e  m, either MEM_In
30b0: 74 20 6f 72 20 4d 45 4d 5f 52 65 61 6c 20 6f 72  t or MEM_Real or
30c0: 20 62 6f 74 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65   both or.** none
30d0: 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65  .  .**.** Unlike
30e0: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
30f0: 69 6e 69 74 79 28 29 2c 20 74 68 69 73 20 72 6f  inity(), this ro
3100: 75 74 69 6e 65 20 64 6f 65 73 20 6e 6f 74 20 6d  utine does not m
3110: 6f 64 69 66 79 20 70 4d 65 6d 2d 3e 66 6c 61 67  odify pMem->flag
3120: 73 2e 0a 2a 2a 20 42 75 74 20 69 74 20 64 6f 65  s..** But it doe
3130: 73 20 73 65 74 20 70 4d 65 6d 2d 3e 75 2e 72 20  s set pMem->u.r 
3140: 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 61 70  and pMem->u.i ap
3150: 70 72 6f 70 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a  propriately..*/.
3160: 73 74 61 74 69 63 20 75 31 36 20 6e 75 6d 65 72  static u16 numer
3170: 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d  icType(Mem *pMem
3180: 29 7b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66  ){.  if( pMem->f
3190: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
31a0: 4d 45 4d 5f 52 65 61 6c 29 20 29 7b 0a 20 20 20  MEM_Real) ){.   
31b0: 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c   return pMem->fl
31c0: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
31d0: 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 7d 0a 20 20  EM_Real);.  }.  
31e0: 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  if( pMem->flags 
31f0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
3200: 6c 6f 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  lob) ){.    retu
3210: 72 6e 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69  rn computeNumeri
3220: 63 54 79 70 65 28 70 4d 65 6d 29 3b 0a 20 20 7d  cType(pMem);.  }
3230: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
3240: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3250: 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20  BUG./*.** Write 
3260: 61 20 6e 69 63 65 20 73 74 72 69 6e 67 20 72 65  a nice string re
3270: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
3280: 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
3290: 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74  cell pMem.** int
32a0: 6f 20 62 75 66 66 65 72 20 7a 42 75 66 2c 20 6c  o buffer zBuf, l
32b0: 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76  ength nBuf..*/.v
32c0: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d  oid sqlite3VdbeM
32d0: 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 4d 65  emPrettyPrint(Me
32e0: 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a  m *pMem, char *z
32f0: 42 75 66 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43  Buf){.  char *zC
3300: 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74  sr = zBuf;.  int
3310: 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   f = pMem->flags
3320: 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ;..  static cons
3330: 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e  t char *const en
3340: 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29  cnames[] = {"(X)
3350: 22 2c 20 22 28 38 29 22 2c 20 22 28 31 36 4c 45  ", "(8)", "(16LE
3360: 29 22 2c 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a  )", "(16BE)"};..
3370: 20 20 69 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62    if( f&MEM_Blob
3380: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
3390: 20 20 20 63 68 61 72 20 63 3b 0a 20 20 20 20 69     char c;.    i
33a0: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
33b0: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 7a 27 3b  {.      c = 'z';
33c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
33d0: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
33e0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
33f0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3400: 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29  f & MEM_Static )
3410: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 74 27 3b  {.      c = 't';
3420: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3430: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
3440: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3450: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3460: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
3470: 20 20 20 20 63 20 3d 20 27 65 27 3b 0a 20 20 20      c = 'e';.   
3480: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3490: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
34a0: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
34b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 20 3d  }else{.      c =
34c0: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   's';.    }..   
34d0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
34e0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 63  f(100, zCsr, "%c
34f0: 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43 73 72 20  ", c);.    zCsr 
3500: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3510: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 73 71  30(zCsr);.    sq
3520: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3530: 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c  00, zCsr, "%d[",
3540: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a   pMem->n);.    z
3550: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3560: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3570: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20    for(i=0; i<16 
3580: 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b  && i<pMem->n; i+
3590: 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  +){.      sqlite
35a0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
35b0: 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28  zCsr, "%02X", ((
35c0: 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26  int)pMem->z[i] &
35d0: 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a   0xFF));.      z
35e0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
35f0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3600: 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b    }.    for(i=0;
3610: 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d   i<16 && i<pMem-
3620: 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; i++){.      
3630: 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a  char z = pMem->z
3640: 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  [i];.      if( z
3650: 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a  <32 || z>126 ) *
3660: 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20  zCsr++ = '.';.  
3670: 20 20 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b      else *zCsr++
3680: 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   = z;.    }..   
3690: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
36a0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25  f(100, zCsr, "]%
36b0: 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  s", encnames[pMe
36c0: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43  m->enc]);.    zC
36d0: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
36e0: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
36f0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72   if( f & MEM_Zer
3700: 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  o ){.      sqlit
3710: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3720: 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65   zCsr,"+%dz",pMe
3730: 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20  m->u.nZero);.   
3740: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3750: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3760: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73  ;.    }.    *zCs
3770: 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73  r = '\0';.  }els
3780: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3790: 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20  r ){.    int j, 
37a0: 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d  k;.    zBuf[0] =
37b0: 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66 20   ' ';.    if( f 
37c0: 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20  & MEM_Dyn ){.   
37d0: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27     zBuf[1] = 'z'
37e0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
37f0: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
3800: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3810: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3820: 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20   f & MEM_Static 
3830: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
3840: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
3850: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3860: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
3870: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3880: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
3890: 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  m ){.      zBuf[
38a0: 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20  1] = 'e';.      
38b0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
38c0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
38d0: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
38e0: 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31  se{.      zBuf[1
38f0: 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20  ] = 's';.    }. 
3900: 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71     k = 2;.    sq
3910: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3920: 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25  00, &zBuf[k], "%
3930: 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  d", pMem->n);.  
3940: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
3950: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
3960: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
3970: 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a  = '[';.    for(j
3980: 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d  =0; j<15 && j<pM
3990: 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20  em->n; j++){.   
39a0: 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e     u8 c = pMem->
39b0: 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[j];.      if( 
39c0: 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78 37  c>=0x20 && c<0x7
39d0: 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  f ){.        zBu
39e0: 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20  f[k++] = c;.    
39f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
3a00: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27   zBuf[k++] = '.'
3a10: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
3a20: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3a30: 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ']';.    sqlite3
3a40: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26 7a  _snprintf(100,&z
3a50: 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73  Buf[k], encnames
3a60: 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20  [pMem->enc]);.  
3a70: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
3a80: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
3a90: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
3aa0: 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69  = 0;.  }.}.#endi
3ab0: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
3ac0: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69  _DEBUG./*.** Pri
3ad0: 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nt the value of 
3ae0: 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20 74  a register for t
3af0: 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73 3a  racing purposes:
3b00: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3b10: 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 4d 65  memTracePrint(Me
3b20: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e  m *p){.  if( p->
3b30: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65  flags & MEM_Unde
3b40: 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70 72 69  fined ){.    pri
3b50: 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65 64 22  ntf(" undefined"
3b60: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  );.  }else if( p
3b70: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
3b80: 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ll ){.    printf
3b90: 28 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c  (" NULL");.  }el
3ba0: 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  se if( (p->flags
3bb0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3bc0: 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c  Str))==(MEM_Int|
3bd0: 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20  MEM_Str) ){.    
3be0: 70 72 69 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64  printf(" si:%lld
3bf0: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65  ", p->u.i);.  }e
3c00: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3c10: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
3c20: 20 20 70 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c    printf(" i:%ll
3c30: 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66  d", p->u.i);.#if
3c40: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3c50: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
3c60: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3c70: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
3c80: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3c90: 72 3a 25 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a  r:%g", p->u.r);.
3ca0: 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20 69  #endif.  }else i
3cb0: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3cc0: 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20 20 20  M_RowSet ){.    
3cd0: 70 72 69 6e 74 66 28 22 20 28 72 6f 77 73 65 74  printf(" (rowset
3ce0: 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  )");.  }else{.  
3cf0: 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d    char zBuf[200]
3d00: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
3d10: 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28  eMemPrettyPrint(
3d20: 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 70 72  p, zBuf);.    pr
3d30: 69 6e 74 66 28 22 20 25 73 22 2c 20 7a 42 75 66  intf(" %s", zBuf
3d40: 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20  );.  }.}.static 
3d50: 76 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61  void registerTra
3d60: 63 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d  ce(int iReg, Mem
3d70: 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22   *p){.  printf("
3d80: 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65  REG[%d] = ", iRe
3d90: 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72  g);.  memTracePr
3da0: 69 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66  int(p);.  printf
3db0: 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66  ("\n");.}.#endif
3dc0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
3dd0: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
3de0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
3df0: 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73  ,M) if(db->flags
3e00: 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63  &SQLITE_VdbeTrac
3e10: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
3e20: 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  R,M).#else.#  de
3e30: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
3e40: 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a  ACE(R,M).#endif.
3e50: 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
3e60: 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77  OFILE../* .** hw
3e70: 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20  time.h contains 
3e80: 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72  inline assembler
3e90: 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d   code for implem
3ea0: 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d  enting .** high-
3eb0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69  performance timi
3ec0: 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a  ng routines..*/.
3ed0: 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65  #include "hwtime
3ee0: 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .h"..#endif..#if
3ef0: 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a  ndef NDEBUG./*.*
3f00: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
3f10: 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66  is only called f
3f20: 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73  rom within an as
3f30: 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f  sert() expressio
3f40: 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20  n. It.** checks 
3f50: 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33  that the sqlite3
3f60: 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61  .nTransaction va
3f70: 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63  riable is correc
3f80: 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68  tly set to.** th
3f90: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  e number of non-
3fa0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
3fb0: 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79  points currently
3fc0: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b   in the .** link
3fd0: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
3fe0: 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76   at sqlite3.pSav
3ff0: 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55  epoint..** .** U
4000: 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  sage:.**.**     
4010: 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
4020: 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
4030: 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  );.*/.static int
4040: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
4050: 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62  ount(sqlite3 *db
4060: 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a  ){.  int n = 0;.
4070: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a    Savepoint *p;.
4080: 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76    for(p=db->pSav
4090: 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e  epoint; p; p=p->
40a0: 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73  pNext) n++;.  as
40b0: 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53  sert( n==(db->nS
40c0: 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69  avepoint + db->i
40d0: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
40e0: 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75  point) );.  retu
40f0: 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  rn 1;.}.#endif..
4100: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
4110: 20 72 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70   register of pOp
4120: 2d 3e 70 32 20 61 66 74 65 72 20 66 69 72 73 74  ->p2 after first
4130: 20 70 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f   preparing it to
4140: 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74   be.** overwritt
4150: 65 6e 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67  en with an integ
4160: 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 20 0a 73 74  er value..*/ .st
4170: 61 74 69 63 20 4d 65 6d 20 2a 6f 75 74 32 50 72  atic Mem *out2Pr
4180: 65 72 65 6c 65 61 73 65 28 56 64 62 65 20 2a 70  erelease(Vdbe *p
4190: 2c 20 56 64 62 65 4f 70 20 2a 70 4f 70 29 7b 0a  , VdbeOp *pOp){.
41a0: 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 20 20 61    Mem *pOut;.  a
41b0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
41c0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
41d0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p2<=(p->nMem-
41e0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
41f0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
4200: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d  [pOp->p2];.  mem
4210: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
4220: 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64   pOut);.  if( Vd
4230: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
4240: 74 29 20 29 20 73 71 6c 69 74 65 33 56 64 62 65  t) ) sqlite3Vdbe
4250: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
4260: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
4270: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74  = MEM_Int;.  ret
4280: 75 72 6e 20 70 4f 75 74 3b 0a 7d 0a 0a 0a 2f 2a  urn pOut;.}.../*
4290: 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d  .** Execute as m
42a0: 75 63 68 20 6f 66 20 61 20 56 44 42 45 20 70 72  uch of a VDBE pr
42b0: 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61 6e 2e  ogram as we can.
42c0: 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20  .** This is the 
42d0: 63 6f 72 65 20 6f 66 20 73 71 6c 69 74 65 33 5f  core of sqlite3_
42e0: 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e 74  step().  .*/.int
42f0: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
4300: 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20 20  (.  Vdbe *p     
4310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4320: 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b  * The VDBE */.){
4330: 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e  .  Op *aOp = p->
4340: 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  aOp;          /*
4350: 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20   Copy of p->aOp 
4360: 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20 3d 20 61  */.  Op *pOp = a
4370: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Op;             
4380: 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61  /* Current opera
4390: 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64 65 66 69  tion */.#if defi
43a0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
43b0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42  ) || defined(VDB
43c0: 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 4f 70 20  E_PROFILE).  Op 
43d0: 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20 20 20 20  *pOrigOp;       
43e0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
43f0: 20 6f 66 20 70 4f 70 20 61 74 20 74 68 65 20 74   of pOp at the t
4400: 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a  op of the loop *
4410: 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 72  /.#endif.  int r
4420: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20  c = SQLITE_OK;  
4430: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
4440: 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71  o return */.  sq
4450: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64  lite3 *db = p->d
4460: 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  b;       /* The 
4470: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38  database */.  u8
4480: 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
4490: 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65  ult = 0; /* Rese
44a0: 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61  t schema after a
44b0: 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74  n error if posit
44c0: 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f  ive */.  u8 enco
44d0: 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20  ding = ENC(db); 
44e0: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
44f0: 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ase encoding */.
4500: 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d    int iCompare =
4510: 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   0;          /* 
4520: 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f  Result of last O
4530: 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
4540: 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ion */.  unsigne
4550: 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20  d nVmStep = 0;  
4560: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
4570: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
4580: 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65   steps */.#ifnde
4590: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
45a0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
45b0: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
45c0: 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a  ressLimit = 0;/*
45d0: 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73   Invoke xProgres
45e0: 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70  s() when nVmStep
45f0: 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f   reaches this */
4600: 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61  .#endif.  Mem *a
4610: 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20  Mem = p->aMem;  
4620: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
4630: 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d  p->aMem */.  Mem
4640: 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20   *pIn1 = 0;     
4650: 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69          /* 1st i
4660: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
4670: 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b    Mem *pIn2 = 0;
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4690: 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  2nd input operan
46a0: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33  d */.  Mem *pIn3
46b0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
46c0: 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f    /* 3rd input o
46d0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
46e0: 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20  *pOut = 0;      
46f0: 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74         /* Output
4700: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e   operand */.  in
4710: 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  t *aPermute = 0;
4720: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d           /* Perm
4730: 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d  utation of colum
4740: 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72  ns for OP_Compar
4750: 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52  e */.  i64 lastR
4760: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
4770: 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64 20  owid;  /* Saved 
4780: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61 73  value of the las
4790: 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20 2a  t insert ROWID *
47a0: 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  /.#ifdef VDBE_PR
47b0: 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72  OFILE.  u64 star
47c0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
47d0: 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20     /* CPU clock 
47e0: 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f  count at start o
47f0: 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64  f opcode */.#end
4800: 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54  if.  /*** INSERT
4810: 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52   STACK UNION HER
4820: 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74  E ***/..  assert
4830: 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  ( p->magic==VDBE
4840: 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f  _MAGIC_RUN );  /
4850: 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  * sqlite3_step()
4860: 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a   verifies this *
4870: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45  /.  sqlite3VdbeE
4880: 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70  nter(p);.  if( p
4890: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ->rc==SQLITE_NOM
48a0: 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  EM ){.    /* Thi
48b0: 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d  s happens if a m
48c0: 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61  alloc() inside a
48d0: 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
48e0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f  _column_text() o
48f0: 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  r.    ** sqlite3
4900: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29  _column_text16()
4910: 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20   failed.  */.   
4920: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
4930: 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  }.  assert( p->r
4940: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
4950: 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51  (p->rc&0xff)==SQ
4960: 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 61  LITE_BUSY );.  a
4970: 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
4980: 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e  der || p->readOn
4990: 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 72 63  ly!=0 );.  p->rc
49a0: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
49b0: 70 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d 65 20  p->iCurrentTime 
49c0: 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
49d0: 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a  ->explain==0 );.
49e0: 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20    p->pResultSet 
49f0: 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48  = 0;.  db->busyH
4a00: 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30  andler.nBusy = 0
4a10: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69  ;.  if( db->u1.i
4a20: 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20 67  sInterrupted ) g
4a30: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
4a40: 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 73 71  _interrupt;.  sq
4a50: 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
4a60: 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20  Sql(p);.#ifndef 
4a70: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
4a80: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
4a90: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
4aa0: 73 20 29 7b 0a 20 20 20 20 75 33 32 20 69 50 72  s ){.    u32 iPr
4ab0: 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75 6e 74 65  ior = p->aCounte
4ac0: 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  r[SQLITE_STMTSTA
4ad0: 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20  TUS_VM_STEP];.  
4ae0: 20 20 61 73 73 65 72 74 28 20 30 20 3c 20 64 62    assert( 0 < db
4af0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29  ->nProgressOps )
4b00: 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  ;.    nProgressL
4b10: 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67  imit = db->nProg
4b20: 72 65 73 73 4f 70 73 20 2d 20 28 69 50 72 69 6f  ressOps - (iPrio
4b30: 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  r % db->nProgres
4b40: 73 4f 70 73 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  sOps);.  }.#endi
4b50: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
4b60: 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42  DEBUG.  sqlite3B
4b70: 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
4b80: 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d  ();.  if( p->pc=
4b90: 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d  =0.   && (p->db-
4ba0: 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45  >flags & (SQLITE
4bb0: 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c  _VdbeListing|SQL
4bc0: 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49  ITE_VdbeEQP|SQLI
4bd0: 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d  TE_VdbeTrace))!=
4be0: 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  0.  ){.    int i
4bf0: 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d  ;.    int once =
4c00: 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   1;.    sqlite3V
4c10: 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a  dbePrintSql(p);.
4c20: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
4c30: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
4c40: 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20  beListing ){.   
4c50: 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20     printf("VDBE 
4c60: 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a  Program Listing:
4c70: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  \n");.      for(
4c80: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
4c90: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ++){.        sql
4ca0: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
4cb0: 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b  stdout, i, &aOp[
4cc0: 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  i]);.      }.   
4cd0: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62   }.    if( p->db
4ce0: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4cf0: 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20  _VdbeEQP ){.    
4d00: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
4d10: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
4d20: 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70     if( aOp[i].op
4d30: 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e  code==OP_Explain
4d40: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
4d50: 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28  ( once ) printf(
4d60: 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e  "VDBE Query Plan
4d70: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20  :\n");.         
4d80: 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20   printf("%s\n", 
4d90: 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20  aOp[i].p4.z);.  
4da0: 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30          once = 0
4db0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
4dc0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
4dd0: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
4de0: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
4df0: 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44 42  e )  printf("VDB
4e00: 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20  E Trace:\n");.  
4e10: 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65  }.  sqlite3EndBe
4e20: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65  nignMalloc();.#e
4e30: 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26  ndif.  for(pOp=&
4e40: 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 72 63 3d 3d  aOp[p->pc]; rc==
4e50: 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 4f 70 2b 2b  SQLITE_OK; pOp++
4e60: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
4e70: 4f 70 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26  Op>=aOp && pOp<&
4e80: 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 20 20  aOp[p->nOp]);.  
4e90: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
4ea0: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
4eb0: 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42  _mem;.#ifdef VDB
4ec0: 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 73 74  E_PROFILE.    st
4ed0: 61 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77 74  art = sqlite3Hwt
4ee0: 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ime();.#endif.  
4ef0: 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23 69 66    nVmStep++;.#if
4f00: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
4f10: 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
4f20: 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e 45  S.    if( p->anE
4f30: 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63 5b  xec ) p->anExec[
4f40: 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 5d 2b  (int)(pOp-aOp)]+
4f50: 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f  +;.#endif..    /
4f60: 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61  * Only allow tra
4f70: 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44  cing if SQLITE_D
4f80: 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
4f90: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
4fa0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
4fb0: 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
4fc0: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
4fd0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
4fe0: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
4ff0: 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f 70 20 2d  out, (int)(pOp -
5000: 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20 20 20   aOp), pOp);.   
5010: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20   }.#endif.      
5020: 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74  ..    /* Check t
5030: 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64  o see if we need
5040: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20   to simulate an 
5050: 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73  interrupt.  This
5060: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20   only happens.  
5070: 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20    ** if we have 
5080: 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62  a special test b
5090: 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  uild..    */.#if
50a0: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
50b0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
50c0: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e  interrupt_count>
50d0: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
50e0: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
50f0: 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20  nt--;.      if( 
5100: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
5110: 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20  t_count==0 ){.  
5120: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
5130: 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20  terrupt(db);.   
5140: 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
5150: 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79  f..    /* Sanity
5160: 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68   checking on oth
5170: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23  er operands */.#
5180: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
5190: 55 47 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  UG.    assert( p
51a0: 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71 6c  Op->opflags==sql
51b0: 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72  ite3OpcodeProper
51c0: 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 20  ty[pOp->opcode] 
51d0: 29 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  );.    if( (pOp-
51e0: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
51f0: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
5200: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5210: 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  1>0 );.      ass
5220: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  ert( pOp->p1<=(p
5230: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
5240: 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  r) );.      asse
5250: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
5260: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29  aMem[pOp->p1]) )
5270: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5280: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
5290: 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61  MemInvariants(&a
52a0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b  Mem[pOp->p1]) );
52b0: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
52c0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26  TRACE(pOp->p1, &
52d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  aMem[pOp->p1]);.
52e0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
52f0: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
5300: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
5310: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5320: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
5330: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5340: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5350: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61  rsor) );.      a
5360: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5370: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  d(&aMem[pOp->p2]
5380: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
5390: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
53a0: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
53b0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29  (&aMem[pOp->p2])
53c0: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
53d0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
53e0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
53f0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
5400: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
5410: 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29   OPFLG_IN3)!=0 )
5420: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5430: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
5440: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5450: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
5460: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5470: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5480: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
5490: 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73  p3]) );.      as
54a0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62  sert( sqlite3Vdb
54b0: 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
54c0: 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  nts(&aMem[pOp->p
54d0: 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47  3]) );.      REG
54e0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
54f0: 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p3, &aMem[pOp->
5500: 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p3]);.    }.    
5510: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
5520: 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21  s & OPFLG_OUT2)!
5530: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
5540: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5550: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5560: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
5570: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
5580: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
5590: 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
55a0: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d  pOp->p2]);.    }
55b0: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
55c0: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
55d0: 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  UT3)!=0 ){.     
55e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
55f0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5600: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
5610: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
5620: 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
5630: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
5640: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
5650: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66      }.#endif.#if
5660: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
5670: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
5680: 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a  d(VDBE_PROFILE).
5690: 20 20 20 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f      pOrigOp = pO
56a0: 70 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20  p;.#endif.  .   
56b0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
56c0: 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a  code ){../******
56d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5700: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5710: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20  *******.** What 
5720: 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73  follows is a mas
5730: 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74  sive switch stat
5740: 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68  ement where each
5750: 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73   case implements
5760: 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69   a.** separate i
5770: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68  nstruction in th
5780: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
5790: 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77  e.  If we follow
57a0: 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e   the usual.** in
57b0: 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e  dentation conven
57c0: 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65  tions, each case
57d0: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
57e0: 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e  ted by 6 spaces.
57f0: 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73    But.** that is
5800: 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64   a lot of wasted
5810: 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65   space on the le
5820: 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74  ft margin.  So t
5830: 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a  he code within.*
5840: 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  * the switch sta
5850: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61  tement will brea
5860: 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f  k with conventio
5870: 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c  n and be flush-l
5880: 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20  eft. Another.** 
5890: 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d  big comment (sim
58a0: 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65  ilar to this one
58b0: 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20  ) will mark the 
58c0: 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64  point in the cod
58d0: 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72  e where.** we tr
58e0: 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f  ansition back to
58f0: 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
5900: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ion..**.** The f
5910: 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63  ormatting of eac
5920: 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74  h case is import
5930: 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69  ant.  The makefi
5940: 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a  le for SQLite.**
5950: 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43   generates two C
5960: 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e   files "opcodes.
5970: 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e  h" and "opcodes.
5980: 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  c" by scanning t
5990: 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b  his.** file look
59a0: 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68  ing for lines th
59b0: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63  at begin with "c
59c0: 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f  ase OP_".  The o
59d0: 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a  pcodes.h files.*
59e0: 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64  * will be filled
59f0: 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74   with #defines t
5a00: 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20  hat give unique 
5a10: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74  integer values t
5a20: 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65  o each.** opcode
5a30: 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73   and the opcodes
5a40: 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65  .c file is fille
5a50: 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20  d with an array 
5a60: 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65  of strings where
5a70: 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20  .** each string 
5a80: 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  is the symbolic 
5a90: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72  name for the cor
5aa0: 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64  responding opcod
5ab0: 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61  e.  If the.** ca
5ac0: 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  se statement is 
5ad0: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
5ae0: 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  mment of the for
5af0: 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e  m "/# same as ..
5b00: 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f  . #/".** that co
5b10: 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  mment is used to
5b20: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70   determine the p
5b30: 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20  articular value 
5b40: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a  of the opcode..*
5b50: 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f  *.** Other keywo
5b60: 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65  rds in the comme
5b70: 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  nt that follows 
5b80: 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73  each case are us
5b90: 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75  ed to.** constru
5ba0: 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49  ct the OPFLG_INI
5bb0: 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74  TIALIZER value t
5bc0: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
5bd0: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
5be0: 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e  ..** Keywords in
5bf0: 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c  clude: in1, in2,
5c00: 20 69 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33   in3, out2, out3
5c10: 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b  .  See.** the mk
5c20: 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69  opcodeh.awk scri
5c30: 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  pt for additiona
5c40: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
5c50: 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69  *.** Documentati
5c60: 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70  on about VDBE op
5c70: 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74  codes is generat
5c80: 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  ed by scanning t
5c90: 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20  his file.** for 
5ca0: 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f  lines of that co
5cb0: 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e  ntain "Opcode:".
5cc0: 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20    That line and 
5cd0: 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a  all subsequent.*
5ce0: 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20  * comment lines 
5cf0: 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20  are used in the 
5d00: 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68  generation of th
5d10: 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f  e opcode.html do
5d20: 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66  cumentation.** f
5d30: 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41  ile..**.** SUMMA
5d40: 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f  RY:.**.**     Fo
5d50: 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f  rmatting is impo
5d60: 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73  rtant to scripts
5d70: 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20   that scan this 
5d80: 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20  file..**     Do 
5d90: 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d  not deviate from
5da0: 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20   the formatting 
5db0: 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20  style currently 
5dc0: 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a  in use..**.*****
5dd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5de0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5df0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e10: 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70  ********/../* Op
5e20: 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32  code:  Goto * P2
5e30: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20   * * *.**.** An 
5e40: 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75  unconditional ju
5e50: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
5e60: 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e  ..** The next in
5e70: 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74  struction execut
5e80: 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74  ed will be .** t
5e90: 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20  he one at index 
5ea0: 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  P2 from the begi
5eb0: 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20  nning of.** the 
5ec0: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54  program..**.** T
5ed0: 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 20  he P1 parameter 
5ee0: 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  is not actually 
5ef0: 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  used by this opc
5f00: 6f 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ode.  However, i
5f10: 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65  t.** is sometime
5f20: 73 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65  s set to 1 inste
5f30: 61 64 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e  ad of 0 as a hin
5f40: 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64  t to the command
5f50: 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74  -line shell.** t
5f60: 68 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73  hat this Goto is
5f70: 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61   the bottom of a
5f80: 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74   loop and that t
5f90: 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32  he lines from P2
5fa0: 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20   down.** to the 
5fb0: 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f  current line sho
5fc0: 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20  uld be indented 
5fd0: 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
5fe0: 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  ut..*/.case OP_G
5ff0: 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20  oto: {          
6000: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75     /* jump */.ju
6010: 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
6020: 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
6030: 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  :.  pOp = &aOp[p
6040: 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20  Op->p2 - 1];..  
6050: 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20  /* Opcodes that 
6060: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
6070: 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70  bottom of a loop
6080: 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72   (OP_Next, OP_Pr
6090: 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78  ev,.  ** OP_VNex
60a0: 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65 78 74  t, OP_RowSetNext
60b0: 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65  , or OP_SorterNe
60c0: 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72  xt) all jump her
60d0: 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70  e upon.  ** comp
60e0: 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74  letion.  Check t
60f0: 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33  o see if sqlite3
6100: 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73  _interrupt() has
6110: 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a   been called.  *
6120: 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67  * or if the prog
6130: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65  ress callback ne
6140: 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  eds to be invoke
6150: 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  d. .  **.  ** Th
6160: 69 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73  is code uses uns
6170: 74 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22  tructured "goto"
6180: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20   statements and 
6190: 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c  does not look cl
61a0: 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68  ean..  ** But th
61b0: 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f  at is not due to
61c0: 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68   sloppy coding h
61d0: 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20  abits. The code 
61e0: 69 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a  is written this.
61f0: 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72    ** way for per
6200: 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f  formance, to avo
6210: 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e  id having to run
6220: 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61   the interrupt a
6230: 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a  nd progress.  **
6240: 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79   checks on every
6250: 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68   opcode.  This h
6260: 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65  elps sqlite3_ste
6270: 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74  p() to run about
6280: 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65   1.5%.  ** faste
6290: 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22  r according to "
62a0: 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d  valgrind --tool=
62b0: 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63  cachegrind" */.c
62c0: 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
62d0: 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31  pt:.  if( db->u1
62e0: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
62f0: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
6300: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69  to_interrupt;.#i
6310: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
6320: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
6330: 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68  ACK.  /* Call th
6340: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6350: 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e  ack if it is con
6360: 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20  figured and the 
6370: 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a  required number.
6380: 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73    ** of VDBE ops
6390: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
63a0: 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63  ted (either sinc
63b0: 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f  e this invocatio
63c0: 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65  n of.  ** sqlite
63d0: 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73  3VdbeExec() or s
63e0: 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74  ince last time t
63f0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
6400: 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29  back was called)
6410: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72  ..  ** If the pr
6420: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
6430: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
6440: 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75  , exit the virtu
6450: 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a  al machine with.
6460: 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f    ** a return co
6470: 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  de SQLITE_ABORT.
6480: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
6490: 78 50 72 6f 67 72 65 73 73 21 3d 30 20 26 26 20  xProgress!=0 && 
64a0: 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65  nVmStep>=nProgre
64b0: 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20 20 61  ssLimit ){.    a
64c0: 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67  ssert( db->nProg
64d0: 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20  ressOps!=0 );.  
64e0: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
64f0: 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d   = nVmStep + db-
6500: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20  >nProgressOps - 
6510: 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72  (nVmStep%db->nPr
6520: 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20 20  ogressOps);.    
6530: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
6540: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
6550: 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20  rg) ){.      rc 
6560: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
6570: 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  PT;.      goto v
6580: 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
6590: 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
65a0: 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  .  .  break;.}..
65b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75  /* Opcode:  Gosu
65c0: 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  b P1 P2 * * *.**
65d0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75  .** Write the cu
65e0: 72 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e  rrent address on
65f0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  to register P1.*
6600: 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20  * and then jump 
6610: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  to address P2..*
6620: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a  /.case OP_Gosub:
6630: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
6640: 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
6650: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
6660: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
6670: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
6680: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
6690: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
66a0: 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  rt( VdbeMemDynam
66b0: 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20  ic(pIn1)==0 );. 
66c0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
66d0: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49  e(p, pIn1);.  pI
66e0: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
66f0: 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  Int;.  pIn1->u.i
6700: 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70   = (int)(pOp-aOp
6710: 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
6720: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
6730: 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20 6a  1);..  /* Most j
6740: 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20 64  ump operations d
6750: 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69 73  o a goto to this
6760: 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20 74   spot in order t
6770: 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74 68  o update.  ** th
6780: 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20 2a  e pOp pointer. *
6790: 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20 20  /.jump_to_p2:.  
67a0: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e  pOp = &aOp[pOp->
67b0: 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61 6b  p2 - 1];.  break
67c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
67d0: 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a   Return P1 * * *
67e0: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
67f0: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
6800: 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20  ction after the 
6810: 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73  address in regis
6820: 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a 2a  ter P1.  After.*
6830: 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69  * the jump, regi
6840: 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20  ster P1 becomes 
6850: 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61  undefined..*/.ca
6860: 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20  se OP_Return: { 
6870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6880: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
6890: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
68a0: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
68b0: 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
68c0: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e 31   pOp = &aOp[pIn1
68d0: 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d 3e  ->u.i];.  pIn1->
68e0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65  flags = MEM_Unde
68f0: 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a  fined;.  break;.
6900: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
6910: 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 50  itCoroutine P1 P
6920: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
6930: 65 74 20 75 70 20 72 65 67 69 73 74 65 72 20 50  et up register P
6940: 31 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c  1 so that it wil
6950: 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20 63  l Yield to the c
6960: 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61  oroutine.** loca
6970: 74 65 64 20 61 74 20 61 64 64 72 65 73 73 20 50  ted at address P
6980: 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21 3d  3..**.** If P2!=
6990: 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f 75  0 then the corou
69a0: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tine implementat
69b0: 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ion immediately 
69c0: 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20  follows.** this 
69d0: 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70  opcode.  So jump
69e0: 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75 74   over the corout
69f0: 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ine implementati
6a00: 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73  on to.** address
6a10: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
6a20: 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69 6e  lso: EndCoroutin
6a30: 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69  e.*/.case OP_Ini
6a40: 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20  tCoroutine: {   
6a50: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
6a60: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
6a70: 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70   &&  pOp->p1<=(p
6a80: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
6a90: 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  r) );.  assert( 
6aa0: 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f  pOp->p2>=0 && pO
6ab0: 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  p->p2<p->nOp );.
6ac0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6ad0: 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  3>=0 && pOp->p3<
6ae0: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74  p->nOp );.  pOut
6af0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6b00: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56 64  ];.  assert( !Vd
6b10: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
6b20: 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  t) );.  pOut->u.
6b30: 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b  i = pOp->p3 - 1;
6b40: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
6b50: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20   MEM_Int;.  if( 
6b60: 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a  pOp->p2 ) goto j
6b70: 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
6b80: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6b90: 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20  :  EndCoroutine 
6ba0: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
6bb0: 20 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e   The instruction
6bc0: 20 61 74 20 74 68 65 20 61 64 64 72 65 73 73 20   at the address 
6bd0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
6be0: 73 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75  s a Yield..** Ju
6bf0: 6d 70 20 74 6f 20 74 68 65 20 50 32 20 70 61 72  mp to the P2 par
6c00: 61 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20 59  ameter of that Y
6c10: 69 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74  ield..** After t
6c20: 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65  he jump, registe
6c30: 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64  r P1 becomes und
6c40: 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  efined..**.** Se
6c50: 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f  e also: InitCoro
6c60: 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  utine.*/.case OP
6c70: 5f 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b  _EndCoroutine: {
6c80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6c90: 31 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70  1 */.  VdbeOp *p
6ca0: 43 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d  Caller;.  pIn1 =
6cb0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6cc0: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
6cd0: 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20  >flags==MEM_Int 
6ce0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
6cf0: 31 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e  1->u.i>=0 && pIn
6d00: 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b  1->u.i<p->nOp );
6d10: 0a 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f  .  pCaller = &aO
6d20: 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20  p[pIn1->u.i];.  
6d30: 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d  assert( pCaller-
6d40: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c  >opcode==OP_Yiel
6d50: 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
6d60: 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26  Caller->p2>=0 &&
6d70: 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e   pCaller->p2<p->
6d80: 6e 4f 70 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26  nOp );.  pOp = &
6d90: 61 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e 70 32 20  aOp[pCaller->p2 
6da0: 2d 20 31 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  - 1];.  pIn1->fl
6db0: 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69  ags = MEM_Undefi
6dc0: 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ned;.  break;.}.
6dd0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65  ./* Opcode:  Yie
6de0: 6c 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ld P1 P2 * * *.*
6df0: 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72  *.** Swap the pr
6e00: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69  ogram counter wi
6e10: 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  th the value in 
6e20: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 54 68  register P1.  Th
6e30: 69 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 65 66  is.** has the ef
6e40: 66 65 63 74 20 6f 66 20 79 69 65 6c 64 69 6e 67  fect of yielding
6e50: 20 74 6f 20 61 20 63 6f 72 6f 75 74 69 6e 65 2e   to a coroutine.
6e60: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f  .**.** If the co
6e70: 72 6f 75 74 69 6e 65 20 74 68 61 74 20 69 73 20  routine that is 
6e80: 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73  launched by this
6e90: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64   instruction end
6ea0: 73 20 77 69 74 68 0a 2a 2a 20 59 69 65 6c 64 20  s with.** Yield 
6eb0: 6f 72 20 52 65 74 75 72 6e 20 74 68 65 6e 20 63  or Return then c
6ec0: 6f 6e 74 69 6e 75 65 20 74 6f 20 74 68 65 20 6e  ontinue to the n
6ed0: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
6ee0: 20 20 42 75 74 20 69 66 0a 2a 2a 20 74 68 65 20    But if.** the 
6ef0: 63 6f 72 6f 75 74 69 6e 65 20 6c 61 75 6e 63 68  coroutine launch
6f00: 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72  ed by this instr
6f10: 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68  uction ends with
6f20: 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65  .** EndCoroutine
6f30: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
6f40: 32 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 6f  2 rather than co
6f50: 6e 74 69 6e 75 69 6e 67 20 77 69 74 68 20 74 68  ntinuing with th
6f60: 65 0a 2a 2a 20 6e 65 78 74 20 69 6e 73 74 72 75  e.** next instru
6f70: 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
6f80: 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75   also: InitCorou
6f90: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
6fa0: 59 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20  Yield: {        
6fb0: 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70      /* in1, jump
6fc0: 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74   */.  int pcDest
6fd0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6fe0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6ff0: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
7000: 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a  mic(pIn1)==0 );.
7010: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
7020: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73  MEM_Int;.  pcDes
7030: 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75  t = (int)pIn1->u
7040: 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  .i;.  pIn1->u.i 
7050: 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
7060: 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  p);.  REGISTER_T
7070: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
7080: 6e 31 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f  n1);.  pOp = &aO
7090: 70 5b 70 63 44 65 73 74 5d 3b 0a 20 20 62 72 65  p[pcDest];.  bre
70a0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
70b0: 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50  :  HaltIfNull  P
70c0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
70d0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72   Synopsis:  if r
70e0: 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a  [P3]=null halt.*
70f0: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
7100: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
7110: 20 50 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e   P3.  If it is N
7120: 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73  ULL then Halt us
7130: 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  ing.** parameter
7140: 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20   P1, P2, and P4 
7150: 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20  as if this were 
7160: 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69  a Halt instructi
7170: 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76  on.  If the.** v
7180: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
7190: 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P3 is not NULL,
71a0: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
71b0: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ne is a no-op..*
71c0: 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74  * The P5 paramet
71d0: 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a  er should be 1..
71e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49  */.case OP_HaltI
71f0: 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a  fNull: {      /*
7200: 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d   in3 */.  pIn3 =
7210: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
7220: 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c  .  if( (pIn3->fl
7230: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
7240: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a  =0 ) break;.  /*
7250: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
7260: 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a  to OP_Halt */.}.
7270: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
7280: 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a  t P1 P2 * P4 P5.
7290: 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64  **.** Exit immed
72a0: 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65  iately.  All ope
72b0: 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61  n cursors, etc a
72c0: 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74  re closed.** aut
72d0: 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a  omatically..**.*
72e0: 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75  * P1 is the resu
72f0: 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  lt code returned
7300: 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63   by sqlite3_exec
7310: 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65  (), sqlite3_rese
7320: 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74  t(),.** or sqlit
7330: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20  e3_finalize().  
7340: 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c  For a normal hal
7350: 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62  t, this should b
7360: 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e  e SQLITE_OK (0).
7370: 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20  .** For errors, 
7380: 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f  it can be some o
7390: 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20  ther value.  If 
73a0: 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69  P1!=0 then P2 wi
73b0: 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  ll determine.** 
73c0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
73d0: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63  o rollback the c
73e0: 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
73f0: 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c  on.  Do not roll
7400: 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f  back.** if P2==O
7410: 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72  E_Fail. Do the r
7420: 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f  ollback if P2==O
7430: 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20  E_Rollback.  If 
7440: 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a  P2==OE_Abort,.**
7450: 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61   then back out a
7460: 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  ll changes that 
7470: 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75  have occurred du
7480: 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74  ring this execut
7490: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44  ion of the.** VD
74a0: 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72  BE, but do not r
74b0: 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
74c0: 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20  saction. .**.** 
74d0: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c  If P4 is not nul
74e0: 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20  l then it is an 
74f0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
7500: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69  ring..**.** P5 i
7510: 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65 65  s a value betwee
7520: 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75  n 0 and 4, inclu
7530: 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69 66  sive, that modif
7540: 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69 6e  ies the P4 strin
7550: 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20  g..**.**    0:  
7560: 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20  (no change).**  
7570: 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63    1:  NOT NULL c
7580: 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  ontraint failed:
7590: 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e   P4.**    2:  UN
75a0: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
75b0: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
75c0: 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73 74   3:  CHECK const
75d0: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
75e0: 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45 49  .**    4:  FOREI
75f0: 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
7600: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a  t failed: P4.**.
7610: 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
7620: 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20 4e  zero and P4 is N
7630: 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79 74  ULL, then everyt
7640: 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20 22  hing after the "
7650: 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64  :" is.** omitted
7660: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73  ..**.** There is
7670: 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c   an implied "Hal
7680: 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63  t 0 0 0" instruc
7690: 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74  tion inserted at
76a0: 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66   the very end of
76b0: 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61  .** every progra
76c0: 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61  m.  So a jump pa
76d0: 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74  st the last inst
76e0: 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  ruction of the p
76f0: 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65  rogram.** is the
7700: 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69   same as executi
7710: 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  ng Halt..*/.case
7720: 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 63 6f   OP_Halt: {.  co
7730: 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
7740: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
7750: 4c 6f 67 46 6d 74 3b 0a 20 20 56 64 62 65 46 72  LogFmt;.  VdbeFr
7760: 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
7770: 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d  nt pcx;..  pcx =
7780: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
7790: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  );.  if( pOp->p1
77a0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  ==SQLITE_OK && p
77b0: 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
77c0: 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d  /* Halt the sub-
77d0: 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20  program. Return 
77e0: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70  control to the p
77f0: 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a  arent frame. */.
7800: 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e      pFrame = p->
7810: 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70  pFrame;.    p->p
7820: 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e  Frame = pFrame->
7830: 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e  pParent;.    p->
7840: 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71  nFrame--;.    sq
7850: 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
7860: 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
7870: 67 65 29 3b 0a 20 20 20 20 70 63 78 20 3d 20 73  ge);.    pcx = s
7880: 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52  qlite3VdbeFrameR
7890: 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a  estore(pFrame);.
78a0: 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20      lastRowid = 
78b0: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  db->lastRowid;. 
78c0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
78d0: 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20  OE_Ignore ){.   
78e0: 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f     /* Instructio
78f0: 6e 20 70 63 78 20 69 73 20 74 68 65 20 4f 50 5f  n pcx is the OP_
7900: 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76  Program that inv
7910: 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f  oked the sub-pro
7920: 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63  gram .      ** c
7930: 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68  urrently being h
7940: 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32  alted. If the p2
7950: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
7960: 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20  this OP_Halt.   
7970: 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f     ** instructio
7980: 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49  n is set to OE_I
7990: 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20  gnore, then the 
79a0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74  sub-program is t
79b0: 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a  hrowing.      **
79c0: 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70   an IGNORE excep
79d0: 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61  tion. In this ca
79e0: 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61  se jump to the a
79f0: 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64  ddress specified
7a00: 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65  .      ** as the
7a10: 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69   p2 of the calli
7a20: 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20  ng OP_Program.  
7a30: 2a 2f 0a 20 20 20 20 20 20 70 63 78 20 3d 20 70  */.      pcx = p
7a40: 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b  ->aOp[pcx].p2-1;
7a50: 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d  .    }.    aOp =
7a60: 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65   p->aOp;.    aMe
7a70: 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
7a80: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d   pOp = &aOp[pcx]
7a90: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
7aa0: 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e  .  p->rc = pOp->
7ab0: 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63  p1;.  p->errorAc
7ac0: 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e  tion = (u8)pOp->
7ad0: 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63  p2;.  p->pc = pc
7ae0: 78 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29  x;.  if( p->rc )
7af0: 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  {.    if( pOp->p
7b00: 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69  5 ){.      stati
7b10: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63  c const char * c
7b20: 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20  onst azType[] = 
7b30: 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55  { "NOT NULL", "U
7b40: 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c  NIQUE", "CHECK",
7b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
7b80: 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20  OREIGN KEY" };. 
7b90: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
7ba0: 2d 3e 70 35 3e 3d 31 20 26 26 20 70 4f 70 2d 3e  ->p5>=1 && pOp->
7bb0: 70 35 3c 3d 34 20 29 3b 0a 20 20 20 20 20 20 74  p5<=4 );.      t
7bc0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
7bd0: 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==1 );.      tes
7be0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
7bf0: 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  2 );.      testc
7c00: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20  ase( pOp->p5==3 
7c10: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
7c20: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b  e( pOp->p5==4 );
7c30: 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20 61  .      zType = a
7c40: 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d  zType[pOp->p5-1]
7c50: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
7c60: 20 20 20 7a 54 79 70 65 20 3d 20 30 3b 0a 20 20     zType = 0;.  
7c70: 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
7c80: 7a 54 79 70 65 21 3d 30 20 7c 7c 20 70 4f 70 2d  zType!=0 || pOp-
7c90: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 20 20  >p4.z!=0 );.    
7ca0: 7a 4c 6f 67 46 6d 74 20 3d 20 22 61 62 6f 72 74  zLogFmt = "abort
7cb0: 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20   at %d in [%s]: 
7cc0: 25 73 22 3b 0a 20 20 20 20 69 66 28 20 7a 54 79  %s";.    if( zTy
7cd0: 70 65 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  pe && pOp->p4.z 
7ce0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
7cf0: 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73  VdbeError(p, "%s
7d00: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
7d10: 65 64 3a 20 25 73 22 2c 20 7a 54 79 70 65 2c 20  ed: %s", zType, 
7d20: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
7d30: 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
7d40: 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  4.z ){.      sql
7d50: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
7d60: 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a   "%s", pOp->p4.z
7d70: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
7d80: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
7d90: 72 72 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e 73  rror(p, "%s cons
7da0: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20  traint failed", 
7db0: 7a 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a 20 20  zType);.    }.  
7dc0: 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f    sqlite3_log(pO
7dd0: 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74 2c 20  p->p1, zLogFmt, 
7de0: 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d  pcx, p->zSql, p-
7df0: 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20  >zErrMsg);.  }. 
7e00: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
7e10: 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65  eHalt(p);.  asse
7e20: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  rt( rc==SQLITE_B
7e30: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
7e40: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
7e50: 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66  TE_ERROR );.  if
7e60: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
7e70: 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d  Y ){.    p->rc =
7e80: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
7e90: 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
7ea0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
7eb0: 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26  TE_OK || (p->rc&
7ec0: 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
7ed0: 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20  NSTRAINT );.    
7ee0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
7ef0: 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65  TE_OK || db->nDe
7f00: 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20  ferredCons>0 || 
7f10: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
7f20: 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63  Cons>0 );.    rc
7f30: 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54   = p->rc ? SQLIT
7f40: 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45  E_ERROR : SQLITE
7f50: 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74  _DONE;.  }.  got
7f60: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
7f70: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
7f80: 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  eger P1 P2 * * *
7f90: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
7fa0: 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65  P2]=P1.**.** The
7fb0: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
7fc0: 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74  value P1 is writ
7fd0: 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ten into registe
7fe0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7ff0: 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20  _Integer: {     
8000: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
8010: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
8020: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
8030: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f    pOut->u.i = pO
8040: 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  p->p1;.  break;.
8050: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
8060: 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  t64 * P2 * P4 *.
8070: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
8080: 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69  2]=P4.**.** P4 i
8090: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
80a0: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20   64-bit integer 
80b0: 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20  value..** Write 
80c0: 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
80d0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
80e0: 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b  case OP_Int64: {
80f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
8100: 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
8110: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
8120: 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
8130: 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30   pOp->p4.pI64!=0
8140: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
8150: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b  = *pOp->p4.pI64;
8160: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
8170: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
8180: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
8190: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20  /* Opcode: Real 
81a0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  * P2 * P4 *.** S
81b0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
81c0: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
81d0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d  pointer to a 64-
81e0: 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  bit floating poi
81f0: 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  nt value..** Wri
8200: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
8210: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8220: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a  */.case OP_Real:
8230: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
8240: 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41   same as TK_FLOA
8250: 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75  T, out2 */.  pOu
8260: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
8270: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
8280: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
8290: 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20  Real;.  assert( 
82a0: 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70  !sqlite3IsNaN(*p
82b0: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b  Op->p4.pReal) );
82c0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 2a  .  pOut->u.r = *
82d0: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20  pOp->p4.pReal;. 
82e0: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
82f0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72  ../* Opcode: Str
8300: 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a  ing8 * P2 * P4 *
8310: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8320: 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50  P2]='P4'.**.** P
8330: 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75  4 points to a nu
8340: 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  l terminated UTF
8350: 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20  -8 string. This 
8360: 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66  opcode is transf
8370: 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61  ormed .** into a
8380: 20 53 74 72 69 6e 67 20 6f 70 63 6f 64 65 20 62   String opcode b
8390: 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63  efore it is exec
83a0: 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72  uted for the fir
83b0: 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e 67  st time.  During
83c0: 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66 6f  .** this transfo
83d0: 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65 6e  rmation, the len
83e0: 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50 34  gth of string P4
83f0: 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e 64   is computed and
8400: 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74 68   stored.** as th
8410: 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e 0a  e P1 parameter..
8420: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
8430: 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  g8: {         /*
8440: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49   same as TK_STRI
8450: 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73  NG, out2 */.  as
8460: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21  sert( pOp->p4.z!
8470: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  =0 );.  pOut = o
8480: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
8490: 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70   pOp);.  pOp->op
84a0: 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67  code = OP_String
84b0: 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71  ;.  pOp->p1 = sq
84c0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f  lite3Strlen30(pO
84d0: 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64  p->p4.z);..#ifnd
84e0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
84f0: 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64  TF16.  if( encod
8500: 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38  ing!=SQLITE_UTF8
8510: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
8520: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
8530: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
8540: 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
8550: 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
8560: 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  C);.    if( rc==
8570: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 20  SQLITE_TOOBIG ) 
8580: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
8590: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
85a0: 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e  =sqlite3VdbeChan
85b0: 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
85c0: 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74   encoding) ) got
85d0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
85e0: 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d 61  sert( pOut->szMa
85f0: 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d 3e  lloc>0 && pOut->
8600: 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a  zMalloc==pOut->z
8610: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8620: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
8630: 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70  Out)==0 );.    p
8640: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20  Out->szMalloc = 
8650: 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  0;.    pOut->fla
8660: 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63  gs |= MEM_Static
8670: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
8680: 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49  4type==P4_DYNAMI
8690: 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  C ){.      sqlit
86a0: 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70  e3DbFree(db, pOp
86b0: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
86c0: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
86d0: 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20   P4_DYNAMIC;.   
86e0: 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75   pOp->p4.z = pOu
86f0: 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  t->z;.    pOp->p
8700: 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d  1 = pOut->n;.  }
8710: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
8720: 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74  p->p1>db->aLimit
8730: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
8740: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
8750: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
8760: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
8770: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73   to the next cas
8780: 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a  e, OP_String */.
8790: 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  }.  ./* Opcode: 
87a0: 53 74 72 69 6e 67 20 50 31 20 50 32 20 50 33 20  String P1 P2 P3 
87b0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
87c0: 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c  s: r[P2]='P4' (l
87d0: 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65  en=P1).**.** The
87e0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34   string value P4
87f0: 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62   of length P1 (b
8800: 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20  ytes) is stored 
8810: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
8820: 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 61  **.** If P5!=0 a
8830: 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  nd the content o
8840: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
8850: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
8860: 72 6f 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ro, then.** the 
8870: 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20  datatype of the 
8880: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 63  register P2 is c
8890: 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f 42  onverted to BLOB
88a0: 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 69  .  The content i
88b0: 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 65  s.** the same se
88c0: 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2c  quence of bytes,
88d0: 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69 6e   it is merely in
88e0: 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20 42  terpreted as a B
88f0: 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f  LOB instead.** o
8900: 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20 69  f a string, as i
8910: 66 20 69 74 20 68 61 64 20 62 65 65 6e 20 43 41  f it had been CA
8920: 53 54 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ST..*/.case OP_S
8930: 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20  tring: {        
8940: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61    /* out2 */.  a
8950: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
8960: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  !=0 );.  pOut = 
8970: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8980: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
8990: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
89a0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
89b0: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
89c0: 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f   pOp->p4.z;.  pO
89d0: 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b  ut->n = pOp->p1;
89e0: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
89f0: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
8a00: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
8a10: 4f 75 74 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  Out);.  if( pOp-
8a20: 3e 70 35 20 29 7b 0a 20 20 20 20 61 73 73 65 72  >p5 ){.    asser
8a30: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
8a40: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
8a50: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
8a60: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
8a70: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
8a80: 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65  p->p3];.    asse
8a90: 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
8aa0: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
8ab0: 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 29   if( pIn3->u.i )
8ac0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
8ad0: 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74  EM_Blob|MEM_Stat
8ae0: 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d  ic|MEM_Term;.  }
8af0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8b00: 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20  Opcode: Null P1 
8b10: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
8b20: 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e 50 33  opsis:  r[P2..P3
8b30: 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=NULL.**.** Wri
8b40: 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72  te a NULL into r
8b50: 65 67 69 73 74 65 72 73 20 50 32 2e 20 20 49 66  egisters P2.  If
8b60: 20 50 33 20 67 72 65 61 74 65 72 20 74 68 61 6e   P3 greater than
8b70: 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77   P2, then also w
8b80: 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74  rite.** NULL int
8b90: 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e  o register P3 an
8ba0: 64 20 65 76 65 72 79 20 72 65 67 69 73 74 65 72  d every register
8bb0: 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61   in between P2 a
8bc0: 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a  nd P3.  If P3.**
8bd0: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32   is less than P2
8be0: 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69   (typically P3 i
8bf0: 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c  s zero) then onl
8c00: 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  y register P2 is
8c10: 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e  .** set to NULL.
8c20: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
8c30: 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65   value is non-ze
8c40: 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65  ro, then also se
8c50: 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65  t the MEM_Cleare
8c60: 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a  d flag so that.*
8c70: 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69  * NULL values wi
8c80: 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65  ll not compare e
8c90: 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c  qual even if SQL
8ca0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
8cb0: 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72  t on.** OP_Ne or
8cc0: 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20   OP_Eq..*/.case 
8cd0: 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  OP_Null: {      
8ce0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
8cf0: 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36    int cnt;.  u16
8d00: 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f 75   nullFlag;.  pOu
8d10: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
8d20: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63 6e  se(p, pOp);.  cn
8d30: 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d  t = pOp->p3-pOp-
8d40: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
8d50: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
8d60: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
8d70: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
8d80: 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e  nullFlag = pOp->
8d90: 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  p1 ? (MEM_Null|M
8da0: 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45  EM_Cleared) : ME
8db0: 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28  M_Null;.  while(
8dc0: 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f   cnt>0 ){.    pO
8dd0: 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  ut++;.    memAbo
8de0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
8df0: 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ut);.    sqlite3
8e00: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
8e10: 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Out);.    pOut->
8e20: 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67  flags = nullFlag
8e30: 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d  ;.    cnt--;.  }
8e40: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8e50: 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c  Opcode: SoftNull
8e60: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53   P1 * * * *.** S
8e70: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d  ynopsis:  r[P1]=
8e80: 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72  NULL.**.** Set r
8e90: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 68 61  egister P1 to ha
8ea0: 76 65 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c  ve the value NUL
8eb0: 4c 20 61 73 20 73 65 65 6e 20 62 79 20 74 68 65  L as seen by the
8ec0: 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a   OP_MakeRecord.*
8ed0: 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62  * instruction, b
8ee0: 75 74 20 64 6f 20 6e 6f 74 20 66 72 65 65 20 61  ut do not free a
8ef0: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
8f00: 62 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69 61  b memory associa
8f10: 74 65 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  ted with.** the 
8f20: 72 65 67 69 73 74 65 72 2c 20 73 6f 20 74 68 61  register, so tha
8f30: 74 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 77  t if the value w
8f40: 61 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  as a string or b
8f50: 6c 6f 62 20 74 68 61 74 20 77 61 73 0a 2a 2a 20  lob that was.** 
8f60: 70 72 65 76 69 6f 75 73 6c 79 20 63 6f 70 69 65  previously copie
8f70: 64 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79  d using OP_SCopy
8f80: 2c 20 74 68 65 20 63 6f 70 69 65 73 20 77 69 6c  , the copies wil
8f90: 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65  l continue to be
8fa0: 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20   valid..*/.case 
8fb0: 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20  OP_SoftNull: {. 
8fc0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
8fd0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28  >0 && pOp->p1<=(
8fe0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
8ff0: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  or) );.  pOut = 
9000: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
9010: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
9020: 28 70 4f 75 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d  (pOut->flags|MEM
9030: 5f 4e 75 6c 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65  _Null)&~MEM_Unde
9040: 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a  fined;.  break;.
9050: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c  }../* Opcode: Bl
9060: 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ob P1 P2 * P4 *.
9070: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9080: 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a  2]=P4 (len=P1).*
9090: 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74  *.** P4 points t
90a0: 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61  o a blob of data
90b0: 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20   P1 bytes long. 
90c0: 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62   Store this.** b
90d0: 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20  lob in register 
90e0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  P2..*/.case OP_B
90f0: 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  lob: {          
9100: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
9110: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
9120: 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58  p1 <= SQLITE_MAX
9130: 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70 4f 75  _LENGTH );.  pOu
9140: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
9150: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71  se(p, pOp);.  sq
9160: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
9170: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
9180: 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20  .z, pOp->p1, 0, 
9190: 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  0);.  pOut->enc 
91a0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
91b0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
91c0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
91d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
91e0: 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a  Variable P1 P2 *
91f0: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
9200: 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74  s: r[P2]=paramet
9210: 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20  er(P1,P4).**.** 
9220: 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c  Transfer the val
9230: 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72  ues of bound par
9240: 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72  ameter P1 into r
9250: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a  egister P2.**.**
9260: 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65   If the paramete
9270: 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e  r is named, then
9280: 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72   its name appear
9290: 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20  s in P4..** The 
92a0: 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65 64  P4 value is used
92b0: 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64   by sqlite3_bind
92c0: 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28  _parameter_name(
92d0: 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61  )..*/.case OP_Va
92e0: 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20  riable: {       
92f0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
9300: 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20    Mem *pVar;    
9310: 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e     /* Value bein
9320: 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f  g transferred */
9330: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
9340: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
9350: 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61  <=p->nVar );.  a
9360: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
9370: 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a  ==0 || pOp->p4.z
9380: 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e  ==p->azVar[pOp->
9390: 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72 20  p1-1] );.  pVar 
93a0: 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e  = &p->aVar[pOp->
93b0: 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73  p1 - 1];.  if( s
93c0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
93d0: 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20  Big(pVar) ){.   
93e0: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
93f0: 20 7d 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32   }.  pOut = out2
9400: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
9410: 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  p);.  sqlite3Vdb
9420: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
9430: 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f  pOut, pVar, MEM_
9440: 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54  Static);.  UPDAT
9450: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
9460: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
9470: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76  ../* Opcode: Mov
9480: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
9490: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
94a0: 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a  2@P3]=r[P1@P3].*
94b0: 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33  *.** Move the P3
94c0: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
94d0: 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  ter P1..P1+P3-1 
94e0: 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  over into.** reg
94f0: 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33  isters P2..P2+P3
9500: 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50  -1.  Registers P
9510: 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a  1..P1+P3-1 are.*
9520: 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61  * left holding a
9530: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e   NULL.  It is an
9540: 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73   error for regis
9550: 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31  ter ranges.** P1
9560: 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32  ..P1+P3-1 and P2
9570: 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65  ..P2+P3-1 to ove
9580: 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20  rlap.  It is an 
9590: 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20  error.** for P3 
95a0: 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
95b0: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f  1..*/.case OP_Mo
95c0: 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20  ve: {.  int n;  
95d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
95e0: 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
95f0: 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a  left to copy */.
9600: 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
9610: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
9620: 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20  o copy from */. 
9630: 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
9640: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
9650: 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e   copy to */..  n
9660: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31   = pOp->p3;.  p1
9670: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
9680: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
9690: 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e  sert( n>0 && p1>
96a0: 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61  0 && p2>0 );.  a
96b0: 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20  ssert( p1+n<=p2 
96c0: 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a  || p2+n<=p1 );..
96d0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
96e0: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
96f0: 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20  em[p2];.  do{.  
9700: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d    assert( pOut<=
9710: 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70  &aMem[(p->nMem-p
9720: 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
9730: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c     assert( pIn1<
9740: 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d  =&aMem[(p->nMem-
9750: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
9760: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
9770: 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
9780: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
9790: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
97a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
97b0: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31  mMove(pOut, pIn1
97c0: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
97d0: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
97e0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e  Out->pScopyFrom>
97f0: 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f  =&aMem[p1] && pO
9800: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70  ut->pScopyFrom<p
9810: 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f 75  Out ){.      pOu
9820: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d  t->pScopyFrom +=
9830: 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20   pOp->p2 - p1;. 
9840: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
9850: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
9860: 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53 54  Out);.    REGIST
9870: 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70  ER_TRACE(p2++, p
9880: 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  Out);.    pIn1++
9890: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
98a0: 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20  }while( --n );. 
98b0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
98c0: 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32  code: Copy P1 P2
98d0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
98e0: 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d  sis: r[P2@P3+1]=
98f0: 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a  r[P1@P3+1].**.**
9900: 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20   Make a copy of 
9910: 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  registers P1..P1
9920: 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65  +P3 into registe
9930: 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a  rs P2..P2+P3..**
9940: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
9950: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65  tion makes a dee
9960: 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  p copy of the va
9970: 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74  lue.  A duplicat
9980: 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20  e.** is made of 
9990: 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  any string or bl
99a0: 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65  ob constant.  Se
99b0: 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e  e also OP_SCopy.
99c0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79  .*/.case OP_Copy
99d0: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20  : {.  int n;..  
99e0: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
99f0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
9a00: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
9a10: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
9a20: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
9a30: 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20  In1 );.  while( 
9a40: 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
9a50: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
9a60: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
9a70: 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44  EM_Ephem);.    D
9a80: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
9a90: 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ut);.#ifdef SQLI
9aa0: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75  TE_DEBUG.    pOu
9ab0: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20  t->pScopyFrom = 
9ac0: 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45  0;.#endif.    RE
9ad0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
9ae0: 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20  ->p2+pOp->p3-n, 
9af0: 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28  pOut);.    if( (
9b00: 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  n--)==0 ) break;
9b10: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20  .    pOut++;.   
9b20: 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pIn1++;.  }.  b
9b30: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
9b40: 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20  de: SCopy P1 P2 
9b50: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
9b60: 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a  s: r[P2]=r[P1].*
9b70: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c  *.** Make a shal
9b80: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69  low copy of regi
9b90: 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  ster P1 into reg
9ba0: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
9bb0: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
9bc0: 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77   makes a shallow
9bd0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
9be0: 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ue.  If the valu
9bf0: 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67  e.** is a string
9c00: 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74   or blob, then t
9c10: 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20  he copy is only 
9c20: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
9c30: 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64  .** original and
9c40: 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72   hence if the or
9c50: 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73  iginal changes s
9c60: 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e  o will the copy.
9c70: 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68  .** Worse, if th
9c80: 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65  e original is de
9c90: 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63  allocated, the c
9ca0: 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61  opy becomes inva
9cb0: 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65  lid..** Thus the
9cc0: 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75   program must gu
9cd0: 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65  arantee that the
9ce0: 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e   original will n
9cf0: 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72  ot change.** dur
9d00: 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65  ing the lifetime
9d10: 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55   of the copy.  U
9d20: 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61  se OP_Copy to ma
9d30: 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a  ke a complete.**
9d40: 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f   copy..*/.case O
9d50: 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  P_SCopy: {      
9d60: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
9d70: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
9d80: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
9d90: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
9da0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
9db0: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c  t!=pIn1 );.  sql
9dc0: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
9dd0: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
9de0: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23  1, MEM_Ephem);.#
9df0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
9e00: 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 70  UG.  if( pOut->p
9e10: 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70  ScopyFrom==0 ) p
9e20: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
9e30: 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20  = pIn1;.#endif. 
9e40: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9e50: 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20  code: ResultRow 
9e60: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
9e70: 79 6e 6f 70 73 69 73 3a 20 20 6f 75 74 70 75 74  ynopsis:  output
9e80: 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P2].**.** 
9e90: 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31  The registers P1
9ea0: 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31   through P1+P2-1
9eb0: 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
9ec0: 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75  e row of.** resu
9ed0: 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  lts. This opcode
9ee0: 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69   causes the sqli
9ef0: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20  te3_step() call 
9f00: 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20  to terminate.** 
9f10: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52  with an SQLITE_R
9f20: 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  OW return code a
9f30: 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68  nd it sets up th
9f40: 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a  e sqlite3_stmt.*
9f50: 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70  * structure to p
9f60: 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f  rovide access to
9f70: 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31   the r(P1)..r(P1
9f80: 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73  +P2-1) values as
9f90: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72  .** the result r
9fa0: 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ow..*/.case OP_R
9fb0: 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65  esultRow: {.  Me
9fc0: 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69  m *pMem;.  int i
9fd0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e  ;.  assert( p->n
9fe0: 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e  ResColumn==pOp->
9ff0: 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2 );.  assert( 
a000: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
a010: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70  ssert( pOp->p1+p
a020: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
a030: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
a040: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
a050: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
a060: 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52 75  CALLBACK.  /* Ru
a070: 6e 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  n the progress c
a080: 6f 75 6e 74 65 72 20 6a 75 73 74 20 62 65 66 6f  ounter just befo
a090: 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20 20  re returning..  
a0a0: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
a0b0: 6f 67 72 65 73 73 21 3d 30 0a 20 20 20 26 26 20  ogress!=0.   && 
a0c0: 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65  nVmStep>=nProgre
a0d0: 73 73 4c 69 6d 69 74 0a 20 20 20 26 26 20 64 62  ssLimit.   && db
a0e0: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
a0f0: 70 50 72 6f 67 72 65 73 73 41 72 67 29 21 3d 30  pProgressArg)!=0
a100: 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  .  ){.    rc = S
a110: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
a120: 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  .    goto vdbe_e
a130: 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23  rror_halt;.  }.#
a140: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74  endif..  /* If t
a150: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61  his statement ha
a160: 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64  s violated immed
a170: 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
a180: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f   constraints, do
a190: 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e  .  ** not return
a1a0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
a1b0: 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e  ows modified. An
a1c0: 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45  d do not RELEASE
a1d0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20   the statement. 
a1e0: 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e   ** transaction.
a1f0: 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   It needs to be 
a200: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f  rolled back.  */
a210: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
a220: 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  !=(rc = sqlite3V
a230: 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29  dbeCheckFk(p, 0)
a240: 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
a250: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
a260: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
a270: 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73     assert( p->us
a280: 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b  esStmtJournal );
a290: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
a2a0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c  .  /* If the SQL
a2b0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c  ITE_CountRows fl
a2c0: 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c  ag is set in sql
a2d0: 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  ite3.flags mask,
a2e0: 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20   then .  ** DML 
a2f0: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b  statements invok
a300: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
a310: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
a320: 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a  er of rows .  **
a330: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65   modified to the
a340: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
a350: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74  he only way that
a360: 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20   a VM that.  ** 
a370: 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e  opens a statemen
a380: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
a390: 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  y invoke this op
a3a0: 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  code..  **.  ** 
a3b0: 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20  In case this is 
a3c0: 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74  such a statement
a3d0: 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74  , close any stat
a3e0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
a3f0: 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79  n.  ** opened by
a400: 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20   this VM before 
a410: 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f  returning contro
a420: 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  l to the user. T
a430: 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65  his is to.  ** e
a440: 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65  nsure that state
a450: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
a460: 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73  s are always nes
a470: 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70  ted, not overlap
a480: 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68  ping..  ** If th
a490: 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74  e open statement
a4a0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
a4b0: 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c  not closed here,
a4c0: 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20   then the user. 
a4d0: 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f   ** may step ano
a4e0: 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65  ther VM that ope
a4f0: 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65  ns its own state
a500: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
a510: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20  . This.  ** may 
a520: 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70  lead to overlapp
a530: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72  ing statement tr
a540: 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a  ansactions..  **
a550: 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d  .  ** The statem
a560: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
a570: 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c  is never a top-l
a580: 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e  evel transaction
a590: 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68  .  Hence.  ** th
a5a0: 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62  e RELEASE call b
a5b0: 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66  elow can never f
a5c0: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ail..  */.  asse
a5d0: 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  rt( p->iStatemen
a5e0: 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67  t==0 || db->flag
a5f0: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
a600: 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ws );.  rc = sql
a610: 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61  ite3VdbeCloseSta
a620: 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f  tement(p, SAVEPO
a630: 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20  INT_RELEASE);.  
a640: 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
a650: 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20  LITE_OK) ){.    
a660: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
a670: 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
a680: 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
a690: 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20   row caches */. 
a6a0: 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28   p->cacheCtr = (
a6b0: 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29  p->cacheCtr + 2)
a6c0: 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  |1;..  /* Make s
a6d0: 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ure the results 
a6e0: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
a6f0: 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d  ow are \000 term
a700: 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20  inated.  ** and 
a710: 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64  have an assigned
a720: 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75   type.  The resu
a730: 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d  lts are de-ephem
a740: 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a  eralized as.  **
a750: 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a   a side effect..
a760: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
a770: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61  >pResultSet = &a
a780: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
a790: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e  for(i=0; i<pOp->
a7a0: 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  p2; i++){.    as
a7b0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
a7c0: 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20  (&pMem[i]) );.  
a7d0: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
a7e0: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
a7f0: 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d  assert( (pMem[i]
a800: 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68  .flags & MEM_Eph
a810: 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  em)==0.         
a820: 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66     || (pMem[i].f
a830: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
a840: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
a850: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
a860: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
a870: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52  &pMem[i]);.    R
a880: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
a890: 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69  p->p1+i, &pMem[i
a8a0: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  ]);.  }.  if( db
a8b0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
a8c0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20   goto no_mem;.. 
a8d0: 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54   /* Return SQLIT
a8e0: 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e  E_ROW.  */.  p->
a8f0: 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
a900: 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63 20   aOp) + 1;.  rc 
a910: 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  = SQLITE_ROW;.  
a920: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
a930: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a940: 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33 20  Concat P1 P2 P3 
a950: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
a960: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50   r[P3]=r[P2]+r[P
a970: 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65  1].**.** Add the
a980: 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74 65   text in registe
a990: 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e  r P1 onto the en
a9a0: 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e  d of the text in
a9b0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 20  .** register P2 
a9c0: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
a9d0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
a9e0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
a9f0: 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20 74  r the P1 or P2 t
aa00: 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  ext are NULL the
aa10: 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20  n store NULL in 
aa20: 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d  P3..**.**   P3 =
aa30: 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20   P2 || P1.**.** 
aa40: 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f  It is illegal fo
aa50: 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62  r P1 and P3 to b
aa60: 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  e the same regis
aa70: 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a  ter. Sometimes,.
aa80: 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65 20  ** if P3 is the 
aa90: 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61 73  same register as
aaa0: 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65   P2, the impleme
aab0: 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a  ntation is able.
aac0: 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65  ** to avoid a me
aad0: 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  mcpy()..*/.case 
aae0: 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20  OP_Concat: {    
aaf0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ab00: 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31  s TK_CONCAT, in1
ab10: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
ab20: 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70   i64 nByte;..  p
ab30: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
ab40: 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
ab50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
ab60: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
ab70: 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
ab80: 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a  ( pIn1!=pOut );.
ab90: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
aba0: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
abb0: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
abc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
abd0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
abe0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
abf0: 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62    if( ExpandBlob
ac00: 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64  (pIn1) || Expand
ac10: 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74  Blob(pIn2) ) got
ac20: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69  o no_mem;.  Stri
ac30: 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
ac40: 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69  ding);.  Stringi
ac50: 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e  fy(pIn2, encodin
ac60: 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49  g);.  nByte = pI
ac70: 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b  n1->n + pIn2->n;
ac80: 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
ac90: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
aca0: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
acb0: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
acc0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
acd0: 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
ace0: 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b  Out, (int)nByte+
acf0: 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29  2, pOut==pIn2) )
ad00: 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
ad10: 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54  m;.  }.  MemSetT
ad20: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
ad30: 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f  M_Str);.  if( pO
ad40: 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20  ut!=pIn2 ){.    
ad50: 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20  memcpy(pOut->z, 
ad60: 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e  pIn2->z, pIn2->n
ad70: 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28  );.  }.  memcpy(
ad80: 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e  &pOut->z[pIn2->n
ad90: 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31  ], pIn1->z, pIn1
ada0: 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b  ->n);.  pOut->z[
adb0: 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74  nByte]=0;.  pOut
adc0: 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30  ->z[nByte+1] = 0
add0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
ade0: 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  |= MEM_Term;.  p
adf0: 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
ae00: 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  yte;.  pOut->enc
ae10: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
ae20: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
ae30: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
ae40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
ae50: 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a 20   Add P1 P2 P3 * 
ae60: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
ae70: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32  r[P3]=r[P1]+r[P2
ae80: 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  ].**.** Add the 
ae90: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
aea0: 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  r P1 to the valu
aeb0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
aec0: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
aed0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
aee0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
aef0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
af00: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
af10: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
af20: 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20  pcode: Multiply 
af30: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
af40: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
af50: 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]*r[P2].**.
af60: 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74  **.** Multiply t
af70: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
af80: 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76  ster P1 by the v
af90: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
afa0: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
afb0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
afc0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
afd0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
afe0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
aff0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b000: 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61  * Opcode: Subtra
b010: 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ct P1 P2 P3 * *.
b020: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
b030: 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a  P3]=r[P2]-r[P1].
b040: 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74  **.** Subtract t
b050: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b060: 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65  ster P1 from the
b070: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b080: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
b090: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b0a0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b0b0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b0c0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b0d0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b0e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69  ./* Opcode: Divi
b0f0: 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
b100: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
b110: 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a  P3]=r[P2]/r[P1].
b120: 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65  **.** Divide the
b130: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b140: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
b150: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b160: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
b170: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b180: 69 73 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f  ister P3 (P3=P2/
b190: 50 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75  P1). If the valu
b1a0: 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65  e in .** registe
b1b0: 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  r P1 is zero, th
b1c0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
b1d0: 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72   NULL. If either
b1e0: 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55   input is .** NU
b1f0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b200: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b210: 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20  code: Remainder 
b220: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b230: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
b240: 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]%r[P1].**.
b250: 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72  ** Compute the r
b260: 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20 69  emainder after i
b270: 6e 74 65 67 65 72 20 72 65 67 69 73 74 65 72 20  nteger register 
b280: 50 32 20 69 73 20 64 69 76 69 64 65 64 20 62 79  P2 is divided by
b290: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
b2a0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b2b0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b2c0: 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65  r P3. .** If the
b2d0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b2e0: 65 72 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68  er P1 is zero th
b2f0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b300: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f  ..** If either o
b310: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20  perand is NULL, 
b320: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b330: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  LL..*/.case OP_A
b340: 64 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  dd:             
b350: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b360: 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69   TK_PLUS, in1, i
b370: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b380: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
b390: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b3a0: 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20  me as TK_MINUS, 
b3b0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b3c0: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70  /.case OP_Multip
b3d0: 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly:             
b3e0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
b3f0: 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TAR, in1, in2, o
b400: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ut3 */.case OP_D
b410: 69 76 69 64 65 3a 20 20 20 20 20 20 20 20 20 20  ivide:          
b420: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b430: 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20   TK_SLASH, in1, 
b440: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
b450: 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20  e OP_Remainder: 
b460: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
b470: 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69  ame as TK_REM, i
b480: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b490: 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b  .  char bIntint;
b4a0: 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75     /* Started ou
b4b0: 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72  t as two integer
b4c0: 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75   operands */.  u
b4d0: 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f  16 flags;      /
b4e0: 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a  * Combined MEM_*
b4f0: 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68   flags from both
b500: 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36   inputs */.  u16
b510: 20 74 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20   type1;      /* 
b520: 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20  Numeric type of 
b530: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
b540: 20 20 75 31 36 20 74 79 70 65 32 3b 20 20 20 20    u16 type2;    
b550: 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70    /* Numeric typ
b560: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
b570: 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20  nd */.  i64 iA; 
b580: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
b590: 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  er value of left
b5a0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
b5b0: 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iB;         /*
b5c0: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
b5d0: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
b5e0: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20  */.  double rA; 
b5f0: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
b600: 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  ue of left opera
b610: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
b620: 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  B;      /* Real 
b630: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
b640: 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e  perand */..  pIn
b650: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
b660: 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75  1];.  type1 = nu
b670: 6d 65 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b  mericType(pIn1);
b680: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
b690: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65  pOp->p2];.  type
b6a0: 32 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  2 = numericType(
b6b0: 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20  pIn2);.  pOut = 
b6c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
b6d0: 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e    flags = pIn1->
b6e0: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
b6f0: 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67  ags;.  if( (flag
b700: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
b710: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
b720: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
b730: 6c 3b 0a 20 20 69 66 28 20 28 74 79 70 65 31 20  l;.  if( (type1 
b740: 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e  & type2 & MEM_In
b750: 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20  t)!=0 ){.    iA 
b760: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn1->u.i;.   
b770: 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b   iB = pIn2->u.i;
b780: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31  .    bIntint = 1
b790: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
b7a0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
b7b0: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
b7c0: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
b7d0: 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41  3AddInt64(&iB,iA
b7e0: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
b7f0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
b800: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
b810: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75  :  if( sqlite3Su
b820: 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  bInt64(&iB,iA) )
b830: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
b840: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
b850: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
b860: 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  if( sqlite3MulIn
b870: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
b880: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
b890: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
b8a0: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
b8b0: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
b8c0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
b8d0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
b8e0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b8f0: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
b900: 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20  ST_INT64 ) goto 
b910: 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20  fp_math;.       
b920: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
b930: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
b940: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
b950: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
b960: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
b970: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
b980: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
b990: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
b9a0: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
b9b0: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
b9c0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
b9d0: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
b9e0: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
b9f0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
ba00: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
ba10: 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d  e{.    bIntint =
ba20: 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20   0;.fp_math:.   
ba30: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
ba40: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
ba50: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
ba60: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
ba70: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
ba80: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
ba90: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
baa0: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
bab0: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
bac0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
bad0: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
bae0: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
baf0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
bb00: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
bb10: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
bb20: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
bb30: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
bb40: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
bb50: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
bb60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
bb70: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
bb80: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
bb90: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
bba0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
bbb0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
bbc0: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
bbd0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
bbe0: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
bbf0: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
bc00: 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20  A = (i64)rA;.   
bc10: 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72       iB = (i64)r
bc20: 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  B;.        if( i
bc30: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
bc40: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
bc50: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
bc60: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
bc70: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
bc80: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
bc90: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
bca0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
bcb0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
bcc0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
bcd0: 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  NT.    pOut->u.i
bce0: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
bcf0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
bd00: 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a  MEM_Int);.#else.
bd10: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
bd20: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
bd30: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
bd40: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
bd50: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
bd60: 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.r = rB;.    
bd70: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
bd80: 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a  Out, MEM_Real);.
bd90: 20 20 20 20 69 66 28 20 28 28 74 79 70 65 31 7c      if( ((type1|
bda0: 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29  type2)&MEM_Real)
bdb0: 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20  ==0 && !bIntint 
bdc0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
bdd0: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
bde0: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
bdf0: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
be00: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
be10: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
be20: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
be30: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
be40: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
be50: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50  pcode: CollSeq P
be60: 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50  1 * * P4.**.** P
be70: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
be80: 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75  o a CollSeq stru
be90: 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20  ct. If the next 
bea0: 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66  call to a user f
beb0: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67  unction.** or ag
bec0: 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71  gregate calls sq
bed0: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
bee0: 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c  Seq(), this coll
bef0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
bf00: 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e  ill.** be return
bf10: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
bf20: 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   by the built-in
bf30: 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e   min(), max() an
bf40: 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75  d nullif().** fu
bf50: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
bf60: 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P1 is not zero
bf70: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 72  , then it is a r
bf80: 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20 73  egister that a s
bf90: 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20  ubsequent min() 
bfa0: 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72  or.** max() aggr
bfb0: 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74  egate will set t
bfc0: 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72 65  o 1 if the curre
bfd0: 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68  nt row is not th
bfe0: 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20  e minimum or.** 
bff0: 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31  maximum.  The P1
c000: 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e 69   register is ini
c010: 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79  tialized to 0 by
c020: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
c030: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  n..**.** The int
c040: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
c050: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
c060: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
c070: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
c080: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
c090: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
c0a0: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
c0b0: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
c0c0: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
c0d0: 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62  ublicly.  Only b
c0e0: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
c0f0: 73 20 68 61 76 65 20 61 63 63 65 73 73 20 74 6f  s have access to
c100: 20 74 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a   this feature..*
c110: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
c120: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
c130: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
c140: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
c150: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
c160: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
c170: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
c180: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
c190: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c1a0: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 30 20 50  ode: Function0 P
c1b0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c1c0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
c1d0: 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a  =func(r[P2@P5]).
c1e0: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
c1f0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
c200: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
c210: 20 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63   a FuncDef objec
c220: 74 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  t that.** define
c230: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20  s the function) 
c240: 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74  with P5 argument
c250: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
c260: 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20  ister P2 and.** 
c270: 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65  successors.  The
c280: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
c290: 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  unction is store
c2a0: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
c2b0: 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  ..** Register P3
c2c0: 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65   must not be one
c2d0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c2e0: 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50   inputs..**.** P
c2f0: 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69  1 is a 32-bit bi
c300: 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67  tmask indicating
c310: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
c320: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f  each argument to
c330: 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f   the .** functio
c340: 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64  n was determined
c350: 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20   to be constant 
c360: 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e  at compile time.
c370: 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   If the first.**
c380: 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f   argument was co
c390: 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20  nstant then bit 
c3a0: 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20  0 of P1 is set. 
c3b0: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
c3c0: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
c3d0: 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61  ther meta data a
c3e0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
c3f0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61   user function a
c400: 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68  rgument using th
c410: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74  e.** sqlite3_set
c420: 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d  _auxdata() API m
c430: 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74  ay be safely ret
c440: 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20  ained until the 
c450: 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  next.** invocati
c460: 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  on of this opcod
c470: 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
c480: 6f 3a 20 46 75 6e 63 74 69 6f 6e 2c 20 41 67 67  o: Function, Agg
c490: 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a  Step, AggFinal.*
c4a0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e  /./* Opcode: Fun
c4b0: 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
c4c0: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
c4d0: 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50  : r[P3]=func(r[P
c4e0: 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76  2@P5]).**.** Inv
c4f0: 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74  oke a user funct
c500: 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69  ion (P4 is a poi
c510: 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
c520: 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63  e3_context objec
c530: 74 20 74 68 61 74 0a 2a 2a 20 63 6f 6e 74 61 69  t that.** contai
c540: 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
c550: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
c560: 62 65 20 72 75 6e 29 20 77 69 74 68 20 50 35 20  be run) with P5 
c570: 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 0a  arguments taken.
c580: 2a 2a 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  ** from register
c590: 20 50 32 20 61 6e 64 20 73 75 63 63 65 73 73 6f   P2 and successo
c5a0: 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  rs.  The result 
c5b0: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
c5c0: 69 73 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20  is stored.** in 
c5d0: 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 52 65  register P3.  Re
c5e0: 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e  gister P3 must n
c5f0: 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ot be one of the
c600: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73   function inputs
c610: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
c620: 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69  32-bit bitmask i
c630: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
c640: 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72  r or not each ar
c650: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a  gument to the .*
c660: 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64  * function was d
c670: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20  etermined to be 
c680: 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70  constant at comp
c690: 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65  ile time. If the
c6a0: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
c6b0: 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20  nt was constant 
c6c0: 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31  then bit 0 of P1
c6d0: 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73   is set. This is
c6e0: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
c6f0: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65  ne.** whether me
c700: 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74  ta data associat
c710: 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66  ed with a user f
c720: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
c730: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71   using the.** sq
c740: 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74  lite3_set_auxdat
c750: 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73  a() API may be s
c760: 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75  afely retained u
c770: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a  ntil the next.**
c780: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
c790: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
c7a0: 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20  * SQL functions 
c7b0: 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f  are initially co
c7c0: 64 65 64 20 61 73 20 4f 50 5f 46 75 6e 63 74 69  ded as OP_Functi
c7d0: 6f 6e 30 20 77 69 74 68 20 50 34 20 70 6f 69 6e  on0 with P4 poin
c7e0: 74 69 6e 67 0a 2a 2a 20 74 6f 20 61 20 46 75 6e  ting.** to a Fun
c7f0: 63 44 65 66 20 6f 62 6a 65 63 74 2e 20 20 42 75  cDef object.  Bu
c800: 74 20 6f 6e 20 66 69 72 73 74 20 65 76 61 6c 75  t on first evalu
c810: 61 74 69 6f 6e 2c 20 74 68 65 20 50 34 20 6f 70  ation, the P4 op
c820: 65 72 61 6e 64 20 69 73 0a 2a 2a 20 61 75 74 6f  erand is.** auto
c830: 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6e 76 65 72  matically conver
c840: 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69  ted into an sqli
c850: 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65  te3_context obje
c860: 63 74 20 61 6e 64 20 74 68 65 20 6f 70 65 72 61  ct and the opera
c870: 74 69 6f 6e 0a 2a 2a 20 63 68 61 6e 67 65 64 20  tion.** changed 
c880: 74 6f 20 74 68 69 73 20 4f 50 5f 46 75 6e 63 74  to this OP_Funct
c890: 69 6f 6e 20 6f 70 63 6f 64 65 2e 20 20 49 6e 20  ion opcode.  In 
c8a0: 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e  this way, the in
c8b0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 0a  itialization of.
c8c0: 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ** the sqlite3_c
c8d0: 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 6f 63  ontext object oc
c8e0: 63 75 72 73 20 6f 6e 6c 79 20 6f 6e 63 65 2c 20  curs only once, 
c8f0: 72 61 74 68 65 72 20 74 68 61 6e 20 6f 6e 63 65  rather than once
c900: 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 65 76 61   for each.** eva
c910: 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 66  luation of the f
c920: 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  unction..**.** S
c930: 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f  ee also: Functio
c940: 6e 30 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67  n0, AggStep, Agg
c950: 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50  Final.*/.case OP
c960: 5f 46 75 6e 63 74 69 6f 6e 30 3a 20 7b 0a 20 20  _Function0: {.  
c970: 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33  int n;.  sqlite3
c980: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a  _context *pCtx;.
c990: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
c9a0: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44  p4type==P4_FUNCD
c9b0: 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d  EF );.  n = pOp-
c9c0: 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p5;.  assert( p
c9d0: 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
c9e0: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
c9f0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61  >nCursor) );.  a
ca00: 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28  ssert( n==0 || (
ca10: 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
ca20: 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  ->p2+n<=(p->nMem
ca30: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20  -p->nCursor)+1) 
ca40: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
ca50: 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20  ->p3<pOp->p2 || 
ca60: 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32  pOp->p3>=pOp->p2
ca70: 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73  +n );.  pCtx = s
ca80: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
ca90: 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43  w(db, sizeof(*pC
caa0: 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65  tx) + (n-1)*size
cab0: 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  of(sqlite3_value
cac0: 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d  *));.  if( pCtx=
cad0: 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
cae0: 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d  ;.  pCtx->pOut =
caf0: 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e   0;.  pCtx->pFun
cb00: 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
cb10: 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d  c;.  pCtx->iOp =
cb20: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
cb30: 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65  );.  pCtx->pVdbe
cb40: 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72   = p;.  pCtx->ar
cb50: 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70  gc = n;.  pOp->p
cb60: 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43  4type = P4_FUNCC
cb70: 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43  TX;.  pOp->p4.pC
cb80: 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70  tx = pCtx;.  pOp
cb90: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46 75  ->opcode = OP_Fu
cba0: 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c  nction;.  /* Fal
cbb0: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
cbc0: 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a  P_Function */.}.
cbd0: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
cbe0: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  : {.  int i;.  s
cbf0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
cc00: 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
cc10: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
cc20: 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43  _FUNCCTX );.  pC
cc30: 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74  tx = pOp->p4.pCt
cc40: 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  x;..  /* If this
cc50: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73   function is ins
cc60: 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72  ide of a trigger
cc70: 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61  , the register a
cc80: 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20  rray in aMem[]. 
cc90: 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65   ** might change
cca0: 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61   from one evalua
ccb0: 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74  tion to the next
ccc0: 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63  .  The next bloc
ccd0: 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63  k of code.  ** c
cce0: 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20  hecks to see if 
ccf0: 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
cd00: 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20  ay has changed, 
cd10: 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a  and if so it.  *
cd20: 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20  * reinitializes 
cd30: 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72  the relavant par
cd40: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
cd50: 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74  3_context object
cd60: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   */.  pOut = &aM
cd70: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
cd80: 66 28 20 70 43 74 78 2d 3e 70 4f 75 74 20 21 3d  f( pCtx->pOut !=
cd90: 20 70 4f 75 74 20 29 7b 0a 20 20 20 20 70 43 74   pOut ){.    pCt
cda0: 78 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74 3b 0a  x->pOut = pOut;.
cdb0: 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e      for(i=pCtx->
cdc0: 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d  argc-1; i>=0; i-
cdd0: 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  -) pCtx->argv[i]
cde0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
cdf0: 2b 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d 41  +i];.  }..  memA
ce00: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
ce10: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 23 69 66  pCtx->pOut);.#if
ce20: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
ce30: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43  .  for(i=0; i<pC
ce40: 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a  tx->argc; i++){.
ce50: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
ce60: 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67  sValid(pCtx->arg
ce70: 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47  v[i]) );.    REG
ce80: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
ce90: 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67  >p2+i, pCtx->arg
cea0: 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  v[i]);.  }.#endi
ceb0: 66 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  f.  MemSetTypeFl
cec0: 61 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 4d  ag(pCtx->pOut, M
ced0: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78  EM_Null);.  pCtx
cee0: 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20  ->fErrorOrAux = 
cef0: 30 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77  0;.  db->lastRow
cf00: 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
cf10: 20 20 28 2a 70 43 74 78 2d 3e 70 46 75 6e 63 2d    (*pCtx->pFunc-
cf20: 3e 78 46 75 6e 63 29 28 70 43 74 78 2c 20 70 43  >xFunc)(pCtx, pC
cf30: 74 78 2d 3e 61 72 67 63 2c 20 70 43 74 78 2d 3e  tx->argc, pCtx->
cf40: 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52  argv); /* IMP: R
cf50: 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
cf60: 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62    lastRowid = db
cf70: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
cf80: 20 52 65 6d 65 6d 62 65 72 20 72 6f 77 69 64 20   Remember rowid 
cf90: 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
cfa0: 78 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20 49  xFunc */..  /* I
cfb0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72  f the function r
cfc0: 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72  eturned an error
cfd0: 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  , throw an excep
cfe0: 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 70 43  tion */.  if( pC
cff0: 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20  tx->fErrorOrAux 
d000: 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d  ){.    if( pCtx-
d010: 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  >isError ){.    
d020: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
d030: 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69  or(p, "%s", sqli
d040: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70  te3_value_text(p
d050: 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20 20  Ctx->pOut));.   
d060: 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73     rc = pCtx->is
d070: 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  Error;.    }.   
d080: 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65   sqlite3VdbeDele
d090: 74 65 41 75 78 44 61 74 61 28 70 2c 20 70 43 74  teAuxData(p, pCt
d0a0: 78 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e 70 31 29  x->iOp, pOp->p1)
d0b0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
d0c0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
d0d0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f  he function into
d0e0: 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a   register P3 */.
d0f0: 20 20 69 66 28 20 70 4f 75 74 2d 3e 66 6c 61 67    if( pOut->flag
d100: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
d110: 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 73 71  _Blob) ){.    sq
d120: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
d130: 6e 63 6f 64 69 6e 67 28 70 43 74 78 2d 3e 70 4f  ncoding(pCtx->pO
d140: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ut, encoding);. 
d150: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
d160: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 43 74 78  beMemTooBig(pCtx
d170: 2d 3e 70 4f 75 74 29 20 29 20 67 6f 74 6f 20 74  ->pOut) ) goto t
d180: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 52  oo_big;.  }..  R
d190: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
d1a0: 70 2d 3e 70 33 2c 20 70 43 74 78 2d 3e 70 4f 75  p->p3, pCtx->pOu
d1b0: 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
d1c0: 5f 42 4c 4f 42 53 49 5a 45 28 70 43 74 78 2d 3e  _BLOBSIZE(pCtx->
d1d0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
d1e0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
d1f0: 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  tAnd P1 P2 P3 * 
d200: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
d210: 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32  r[P3]=r[P1]&r[P2
d220: 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ].**.** Take the
d230: 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66   bit-wise AND of
d240: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
d250: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
d260: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
d270: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
d280: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
d290: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
d2a0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
d2b0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
d2c0: 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31  Opcode: BitOr P1
d2d0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
d2e0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
d2f0: 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]|r[P2].**.**
d300: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
d310: 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  se OR of the val
d320: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
d330: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
d340: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
d350: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
d360: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
d370: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
d380: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
d390: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
d3a0: 53 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20  ShiftLeft P1 P2 
d3b0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
d3c0: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  is:  r[P3]=r[P2]
d3d0: 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68  <<r[P1].**.** Sh
d3e0: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
d3f0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d400: 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74  r P2 to the left
d410: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
d420: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
d430: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
d440: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
d450: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
d460: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
d470: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
d480: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
d490: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
d4a0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
d4b0: 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68 74 20  ode: ShiftRight 
d4c0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d4d0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
d4e0: 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a  =r[P2]>>r[P1].**
d4f0: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
d500: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
d510: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
d520: 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a  e right by the.*
d530: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
d540: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
d550: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
d560: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
d570: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
d580: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
d590: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
d5a0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
d5b0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
d5c0: 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a  .case OP_BitAnd:
d5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5e0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
d5f0: 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  ITAND, in1, in2,
d600: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
d610: 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20  _BitOr:         
d620: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d630: 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e   as TK_BITOR, in
d640: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
d650: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66  case OP_ShiftLef
d660: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
d670: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53  /* same as TK_LS
d680: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
d690: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
d6a0: 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20  ShiftRight: {   
d6b0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d6c0: 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e  as TK_RSHIFT, in
d6d0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
d6e0: 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34 20    i64 iA;.  u64 
d6f0: 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20 20  uA;.  i64 iB;.  
d700: 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d  u8 op;..  pIn1 =
d710: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d720: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
d730: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
d740: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
d750: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
d760: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
d770: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
d780: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
d790: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
d7a0: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
d7b0: 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74 65   }.  iA = sqlite
d7c0: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
d7d0: 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69  n2);.  iB = sqli
d7e0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
d7f0: 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f  pIn1);.  op = pO
d800: 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28  p->opcode;.  if(
d810: 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29   op==OP_BitAnd )
d820: 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b 0a  {.    iA &= iB;.
d830: 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d    }else if( op==
d840: 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20 20  OP_BitOr ){.    
d850: 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA |= iB;.  }els
d860: 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a 20  e if( iB!=0 ){. 
d870: 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f     assert( op==O
d880: 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c 20  P_ShiftRight || 
d890: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
d8a0: 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73   );..    /* If s
d8b0: 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65 67  hifting by a neg
d8c0: 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68  ative amount, sh
d8d0: 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65 72  ift in the other
d8e0: 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20   direction */.  
d8f0: 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20 20    if( iB<0 ){.  
d900: 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
d910: 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68  hiftRight==OP_Sh
d920: 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20  iftLeft+1 );.   
d930: 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69     op = 2*OP_Shi
d940: 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b  ftLeft + 1 - op;
d950: 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e 28  .      iB = iB>(
d960: 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b  -64) ? -iB : 64;
d970: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
d980: 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20 20  iB>=64 ){.      
d990: 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f  iA = (iA>=0 || o
d9a0: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 29  p==OP_ShiftLeft)
d9b0: 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d   ? 0 : -1;.    }
d9c0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63  else{.      memc
d9d0: 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69 7a  py(&uA, &iA, siz
d9e0: 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20 20  eof(uA));.      
d9f0: 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  if( op==OP_Shift
da00: 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Left ){.        
da10: 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20  uA <<= iB;.     
da20: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
da30: 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20  uA >>= iB;.     
da40: 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e     /* Sign-exten
da50: 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68 69  d on a right shi
da60: 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76 65  ft of a negative
da70: 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20   number */.     
da80: 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75 41     if( iA<0 ) uA
da90: 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66 66   |= ((((u64)0xff
daa0: 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78 66  ffffff)<<32)|0xf
dab0: 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34 2d  fffffff) << (64-
dac0: 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  iB);.      }.   
dad0: 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20 26     memcpy(&iA, &
dae0: 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29 3b  uA, sizeof(iA));
daf0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
db00: 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d  t->u.i = iA;.  M
db10: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
db20: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
db30: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
db40: 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20  ode: AddImm  P1 
db50: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
db60: 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 72 5b 50  psis:  r[P1]=r[P
db70: 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64  1]+P2.** .** Add
db80: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
db90: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
dba0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
dbb0: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
dbc0: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
dbd0: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
dbe0: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
dbf0: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
dc00: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
dc10: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
dc20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
dc30: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
dc40: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
dc50: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
dc60: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71  e(p, pIn1);.  sq
dc70: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
dc80: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
dc90: 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
dca0: 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p2;.  break;.}
dcb0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73  ../* Opcode: Mus
dcc0: 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a  tBeInt P1 P2 * *
dcd0: 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20   *.** .** Force 
dce0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
dcf0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
dd00: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
dd10: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
dd20: 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  1 is not an inte
dd30: 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  ger and cannot b
dd40: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
dd50: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77   an integer.** w
dd60: 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  ithout data loss
dd70: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
dd80: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
dd90: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
dda0: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
ddb0: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
ddc0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73  ..*/.case OP_Mus
ddd0: 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  tBeInt: {       
dde0: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
ddf0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
de00: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
de10: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
de20: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
de30: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
de40: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
de50: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
de60: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62  coding);.    Vdb
de70: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49  eBranchTaken((pI
de80: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
de90: 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  t)==0, 2);.    i
dea0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
deb0: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
dec0: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
ded0: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  p2==0 ){.       
dee0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
def0: 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67  MATCH;.        g
df00: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
df10: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65  _error;.      }e
df20: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  lse{.        got
df30: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
df40: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
df50: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
df60: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
df70: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
df80: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
df90: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
dfa0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41  /* Opcode: RealA
dfb0: 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a  ffinity P1 * * *
dfc0: 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69   *.**.** If regi
dfd0: 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e  ster P1 holds an
dfe0: 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74   integer convert
dff0: 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61   it to a real va
e000: 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  lue..**.** This 
e010: 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77  opcode is used w
e020: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
e030: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
e040: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a  a column that.**
e050: 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69   has REAL affini
e060: 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e  ty.  Such column
e070: 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c   values may stil
e080: 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a  l be stored as.*
e090: 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20  * integers, for 
e0a0: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79  space efficiency
e0b0: 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72  , but after extr
e0c0: 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74  action we want t
e0d0: 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f  hem.** to have o
e0e0: 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65  nly a real value
e0f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
e100: 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20  lAffinity: {    
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e120: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
e130: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e140: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
e150: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
e160: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
e170: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
e180: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
e190: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
e1a0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
e1b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73 74  ./* Opcode: Cast
e1c0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
e1d0: 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
e1e0: 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20  ty(r[P1]).**.** 
e1f0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
e200: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
e210: 6f 20 62 65 20 74 68 65 20 74 79 70 65 20 64 65  o be the type de
e220: 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20  fined by P2..** 
e230: 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 20  .** <ul>.** <li 
e240: 76 61 6c 75 65 3d 22 39 37 22 3e 20 54 45 58 54  value="97"> TEXT
e250: 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39  .** <li value="9
e260: 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 20  8"> BLOB.** <li 
e270: 76 61 6c 75 65 3d 22 39 39 22 3e 20 4e 55 4d 45  value="99"> NUME
e280: 52 49 43 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  RIC.** <li value
e290: 3d 22 31 30 30 22 3e 20 49 4e 54 45 47 45 52 0a  ="100"> INTEGER.
e2a0: 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30  ** <li value="10
e2b0: 31 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c  1"> REAL.** </ul
e2c0: 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  >.**.** A NULL v
e2d0: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
e2e0: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
e2f0: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
e300: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
e310: 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Cast: {       
e320: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
e330: 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  1 */.  assert( p
e340: 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41  Op->p2>=SQLITE_A
e350: 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e  FF_BLOB && pOp->
e360: 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  p2<=SQLITE_AFF_R
e370: 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63 61 73  EAL );.  testcas
e380: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
e390: 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a 20  TE_AFF_TEXT );. 
e3a0: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
e3b0: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42  p2==SQLITE_AFF_B
e3c0: 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74 63 61 73  LOB );.  testcas
e3d0: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
e3e0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
e3f0: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
e400: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
e410: 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20 20 74  F_INTEGER );.  t
e420: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e430: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  ==SQLITE_AFF_REA
e440: 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  L );.  pIn1 = &a
e450: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
e460: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
e470: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63 20  (p, pIn1);.  rc 
e480: 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
e490: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
e4a0: 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c 20 70  eMemCast(pIn1, p
e4b0: 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67  Op->p2, encoding
e4c0: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
e4d0: 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
e4e0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
e4f0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
e500: 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  _CAST */../* Opc
e510: 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33  ode: Lt P1 P2 P3
e520: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
e530: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 72 5b 50  is: if r[P1]<r[P
e540: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
e550: 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c   Compare the val
e560: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
e570: 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72  P1 and P3.  If r
e580: 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74  eg(P3)<reg(P1) t
e590: 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61  hen.** jump to a
e5a0: 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a  ddress P2.  .**.
e5b0: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
e5c0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
e5d0: 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
e5e0: 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20   either reg(P1) 
e5f0: 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73  or.** reg(P3) is
e600: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
e610: 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68  the jump.  If th
e620: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
e630: 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63  ULL .** bit is c
e640: 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74  lear then fall t
e650: 68 72 6f 75 67 68 20 69 66 20 65 69 74 68 65 72  hrough if either
e660: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
e670: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
e680: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
e690: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
e6a0: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
e6b0: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
e6c0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
e6d0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
e6e0: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
e6f0: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
e700: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
e710: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
e720: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
e730: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
e740: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
e750: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
e760: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
e770: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
e780: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
e790: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
e7a0: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
e7b0: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
e7c0: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
e7d0: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
e7e0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
e7f0: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
e800: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
e810: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
e820: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
e830: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
e840: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
e850: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
e860: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
e870: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
e880: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
e890: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
e8a0: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
e8b0: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
e8c0: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
e8d0: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
e8e0: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
e8f0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
e900: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
e910: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
e920: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
e930: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
e940: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
e950: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65  in.** P4 is  use
e960: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
e970: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
e980: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
e990: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
e9a0: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
e9b0: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
e9c0: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
e9d0: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
e9e0: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
e9f0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
ea00: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
ea10: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
ea20: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
ea30: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
ea40: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
ea50: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
ea60: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
ea70: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
ea80: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
ea90: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
eaa0: 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66  E_STOREP2 bit of
eab0: 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
eac0: 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49   do not jump.  I
ead0: 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65  nstead,.** store
eae0: 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c   a boolean resul
eaf0: 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20  t (either 0, or 
eb00: 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72  1, or NULL) in r
eb10: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
eb20: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
eb30: 4e 55 4c 4c 45 51 20 62 69 74 20 69 73 20 73 65  NULLEQ bit is se
eb40: 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 20 4e 55  t in P5, then NU
eb50: 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  LL values are co
eb60: 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65 71 75 61  nsidered.** equa
eb70: 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72  l to one another
eb80: 2c 20 70 72 6f 76 69 64 65 64 20 74 68 61 74 20  , provided that 
eb90: 74 68 65 79 20 64 6f 20 6e 6f 74 20 68 61 76 65  they do not have
eba0: 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65 61 72   their MEM_Clear
ebb0: 65 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e 0a 2a  ed.** bit set..*
ebc0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20  /./* Opcode: Ne 
ebd0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
ebe0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
ebf0: 5b 50 31 5d 21 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]!=r[P3] goto
ec00: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
ec10: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
ec20: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
ec30: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
ec40: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
ec50: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e   the operands in
ec60: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
ec70: 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75  d P3 are not equ
ec80: 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  al.  See the Lt 
ec90: 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64  opcode for.** ad
eca0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
ecb0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53  tion..**.** If S
ecc0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
ecd0: 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74  set in P5 then t
ece0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
ecf0: 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79  parison is alway
ed00: 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65  s either.** true
ed10: 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73   or false and is
ed20: 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66   never NULL.  If
ed30: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
ed40: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  re NULL then the
ed50: 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f   result.** of co
ed60: 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c 73  mparison is fals
ed70: 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70  e.  If either op
ed80: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
ed90: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
eda0: 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69   true..** If nei
edb0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
edc0: 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20  NULL the result 
edd0: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
ede0: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
edf0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
ee00: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
ee10: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f  tted from P5..*/
ee20: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50  ./* Opcode: Eq P
ee30: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
ee40: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
ee50: 50 31 5d 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f 20  P1]==r[P3] goto 
ee60: 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P2.**.** This wo
ee70: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
ee80: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
ee90: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
eea0: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
eeb0: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
eec0: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
eed0: 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a   P3 are equal..*
eee0: 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63  * See the Lt opc
eef0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
ef00: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
ef10: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
ef20: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
ef30: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
ef40: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
ef50: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
ef60: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
ef70: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
ef80: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
ef90: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
efa0: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
efb0: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
efc0: 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66 20  on is true.  If 
efd0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
efe0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
eff0: 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e  result is false.
f000: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
f010: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
f020: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
f030: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
f040: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
f050: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
f060: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
f070: 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70  rom P5..*/./* Op
f080: 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50  code: Le P1 P2 P
f090: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f0a0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 3d 72  sis: if r[P1]<=r
f0b0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
f0c0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
f0d0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
f0e0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
f0f0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
f100: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
f110: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
f120: 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61  r P3 is less tha
f130: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
f140: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
f150: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
f160: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f170: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
f180: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
f190: 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20  * Opcode: Gt P1 
f1a0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
f1b0: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
f1c0: 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  ]>r[P3] goto P2.
f1d0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
f1e0: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
f1f0: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
f200: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
f210: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
f220: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
f230: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
f240: 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74  er than the cont
f250: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
f260: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
f270: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f280: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f290: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
f2a0: 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20  de: Ge P1 P2 P3 
f2b0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f2c0: 73 3a 20 69 66 20 72 5b 50 31 5d 3e 3d 72 5b 50  s: if r[P1]>=r[P
f2d0: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
f2e0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
f2f0: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
f300: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
f310: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
f320: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
f330: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
f340: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
f350: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
f360: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
f370: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
f380: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
f390: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
f3a0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
f3b0: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20  case OP_Eq:     
f3c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f3d0: 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70  e as TK_EQ, jump
f3e0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
f3f0: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20  se OP_Ne:       
f400: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f410: 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20  as TK_NE, jump, 
f420: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
f430: 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20   OP_Lt:         
f440: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f450: 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LT, jump, in
f460: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
f470: 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Le:           
f480: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f490: 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_LE, jump, in1,
f4a0: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
f4b0: 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Gt:             
f4c0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f4d0: 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GT, jump, in1, i
f4e0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65  n3 */.case OP_Ge
f4f0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
f500: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45  /* same as TK_GE
f510: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f520: 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
f530: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
f540: 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ult of the compa
f550: 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67  rison of pIn1 ag
f560: 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20  ainst pIn3 */.  
f570: 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
f580: 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
f590: 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61  to use for compa
f5a0: 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66  rison */.  u16 f
f5b0: 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f  lags1;         /
f5c0: 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
f5d0: 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d  l value of pIn1-
f5e0: 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20  >flags */.  u16 
f5f0: 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20  flags3;         
f600: 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69  /* Copy of initi
f610: 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33  al value of pIn3
f620: 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49  ->flags */..  pI
f630: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
f640: 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
f650: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
f660: 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66  flags1 = pIn1->f
f670: 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d  lags;.  flags3 =
f680: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn3->flags;.  
f690: 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c  if( (flags1 | fl
f6a0: 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29  ags3)&MEM_Null )
f6b0: 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  {.    /* One or 
f6c0: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
f6d0: 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66  e NULL */.    if
f6e0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
f6f0: 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20  TE_NULLEQ ){.   
f700: 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f     /* If SQLITE_
f710: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77  NULLEQ is set (w
f720: 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68  hich will only h
f730: 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65  appen if the ope
f740: 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a  rator is.      *
f750: 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65  * OP_Eq or OP_Ne
f760: 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  ) then take the 
f770: 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65  jump or not depe
f780: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
f790: 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74  .      ** or not
f7a0: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
f7b0: 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a  re null..      *
f7c0: 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
f7d0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
f7e0: 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  Eq || pOp->opcod
f7f0: 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
f800: 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67 73    assert( (flags
f810: 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29  1 & MEM_Cleared)
f820: 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  ==0 );.      ass
f830: 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
f840: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f850: 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  L)==0 );.      i
f860: 66 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e  f( (flags1&MEM_N
f870: 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26  ull)!=0.       &
f880: 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75  & (flags3&MEM_Nu
f890: 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26  ll)!=0.       &&
f8a0: 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65   (flags3&MEM_Cle
f8b0: 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29  ared)==0.      )
f8c0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
f8d0: 30 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61  0;  /* Results a
f8e0: 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20  re equal */.    
f8f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
f900: 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65   res = 1;  /* Re
f910: 73 75 6c 74 73 20 61 72 65 20 6e 6f 74 20 65 71  sults are not eq
f920: 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20  ual */.      }. 
f930: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f940: 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  /* SQLITE_NULLEQ
f950: 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74   is clear and at
f960: 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61   least one opera
f970: 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20  nd is NULL,.    
f980: 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65    ** then the re
f990: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e  sult is always N
f9a0: 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68  ULL..      ** Th
f9b0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
f9c0: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  if the SQLITE_JU
f9d0: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20  MPIFNULL bit is 
f9e0: 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  set..      */.  
f9f0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
fa00: 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
fa10: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74   ){.        pOut
fa20: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
fa30: 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65  ];.        MemSe
fa40: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
fa50: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20  MEM_Null);.     
fa60: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
fa70: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
fa80: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
fa90: 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63         VdbeBranc
faa0: 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20  hTaken(2,3);.   
fab0: 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
fac0: 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
fad0: 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20  NULL ){.        
fae0: 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
faf0: 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  2;.        }.   
fb00: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
fb10: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
fb20: 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20  .    /* Neither 
fb30: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
fb40: 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f    Do a compariso
fb50: 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69  n. */.    affini
fb60: 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53  ty = pOp->p5 & S
fb70: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a  QLITE_AFF_MASK;.
fb80: 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79      if( affinity
fb90: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
fba0: 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69 66  ERIC ){.      if
fbb0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
fbc0: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
fbd0: 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
fbe0: 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20  M_Str ){.       
fbf0: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
fc00: 69 6e 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20  inity(pIn1,0);. 
fc10: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
fc20: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
fc30: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
fc40: 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d  l|MEM_Str))==MEM
fc50: 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20  _Str ){.        
fc60: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
fc70: 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20  nity(pIn3,0);.  
fc80: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20      }.    }else 
fc90: 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  if( affinity==SQ
fca0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b  LITE_AFF_TEXT ){
fcb0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31  .      if( (pIn1
fcc0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
fcd0: 72 29 3d 3d 30 20 26 26 20 28 70 49 6e 31 2d 3e  r)==0 && (pIn1->
fce0: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
fcf0: 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29  |MEM_Real))!=0 )
fd00: 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  {.        testca
fd10: 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  se( pIn1->flags 
fd20: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
fd30: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
fd40: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
fd50: 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20  _Real );.       
fd60: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
fd70: 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65  tringify(pIn1, e
fd80: 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20  ncoding, 1);.   
fd90: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 28       testcase( (
fda0: 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20  flags1&MEM_Dyn) 
fdb0: 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26  != (pIn1->flags&
fdc0: 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20  MEM_Dyn) );.    
fdd0: 20 20 20 20 66 6c 61 67 73 31 20 3d 20 28 70 49      flags1 = (pI
fde0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d  n1->flags & ~MEM
fdf0: 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c  _TypeMask) | (fl
fe00: 61 67 73 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d  ags1 & MEM_TypeM
fe10: 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ask);.      }.  
fe20: 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
fe30: 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 3d  lags & MEM_Str)=
fe40: 3d 30 20 26 26 20 28 70 49 6e 33 2d 3e 66 6c 61  =0 && (pIn3->fla
fe50: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
fe60: 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20  M_Real))!=0 ){. 
fe70: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
fe80: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
fe90: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20  EM_Int );.      
fea0: 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33    testcase( pIn3
feb0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
fec0: 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  al );.        sq
fed0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
fee0: 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63 6f  ngify(pIn3, enco
fef0: 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20  ding, 1);.      
ff00: 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61    testcase( (fla
ff10: 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20  gs3&MEM_Dyn) != 
ff20: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn3->flags&MEM
ff30: 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20  _Dyn) );.       
ff40: 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e 33 2d   flags3 = (pIn3-
ff50: 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79  >flags & ~MEM_Ty
ff60: 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
ff70: 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  3 & MEM_TypeMask
ff80: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
ff90: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
ffa0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
ffb0: 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  LSEQ || pOp->p4.
ffc0: 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20  pColl==0 );.    
ffd0: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
ffe0: 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
fff0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10000 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  emExpandBlob(pIn
10010 31 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73 31  1);.      flags1
10020 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20   &= ~MEM_Zero;. 
10030 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 49 6e     }.    if( pIn
10040 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  3->flags & MEM_Z
10050 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ero ){.      sql
10060 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
10070 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20  dBlob(pIn3);.   
10080 20 20 20 66 6c 61 67 73 33 20 26 3d 20 7e 4d 45     flags3 &= ~ME
10090 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20  M_Zero;.    }.  
100a0 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
100b0 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
100c0 5f 6d 65 6d 3b 0a 20 20 20 20 72 65 73 20 3d 20  _mem;.    res = 
100d0 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72  sqlite3MemCompar
100e0 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f  e(pIn3, pIn1, pO
100f0 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20  p->p4.pColl);.  
10100 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d  }.  switch( pOp-
10110 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63  >opcode ){.    c
10120 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65  ase OP_Eq:    re
10130 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20  s = res==0;     
10140 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
10150 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20  OP_Ne:    res = 
10160 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61  res!=0;     brea
10170 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c  k;.    case OP_L
10180 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c  t:    res = res<
10190 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  0;      break;. 
101a0 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20     case OP_Le:  
101b0 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20    res = res<=0; 
101c0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
101d0 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65  ase OP_Gt:    re
101e0 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20  s = res>0;      
101f0 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75  break;.    defau
10200 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20  lt:       res = 
10210 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61  res>=0;     brea
10220 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64  k;.  }..  /* Und
10230 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61  o any changes ma
10240 64 65 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e  de by applyAffin
10250 69 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70  ity() to the inp
10260 75 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f  ut registers. */
10270 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
10280 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
10290 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31 20 26 20  n) == (flags1 & 
102a0 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49  MEM_Dyn) );.  pI
102b0 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67  n1->flags = flag
102c0 73 31 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  s1;.  assert( (p
102d0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
102e0 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 33  _Dyn) == (flags3
102f0 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
10300 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn3->flags = f
10310 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28 20 70 4f  lags3;..  if( pO
10320 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
10330 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f  TOREP2 ){.    pO
10340 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
10350 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  p2];.    memAbou
10360 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
10370 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  t);.    MemSetTy
10380 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
10390 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  _Int);.    pOut-
103a0 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20  >u.i = res;.    
103b0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
103c0 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
103d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
103e0 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
103f0 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 53  =0, (pOp->p5 & S
10400 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a  QLITE_NULLEQ)?2:
10410 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20  3);.    if( res 
10420 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75  ){.      goto ju
10430 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a  mp_to_p2;.    }.
10440 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
10450 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75  /* Opcode: Permu
10460 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20  tation * * * P4 
10470 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
10480 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64  permutation used
10490 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   by the OP_Compa
104a0 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62  re operator to b
104b0 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f  e the array.** o
104c0 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34  f integers in P4
104d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d  ..**.** The perm
104e0 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  utation is only 
104f0 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20  valid until the 
10500 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  next OP_Compare 
10510 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20  that has.** the 
10520 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
10530 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79  it set in P5. Ty
10540 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50  pically the OP_P
10550 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c  ermutation shoul
10560 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65  d .** occur imme
10570 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f  diately prior to
10580 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e   the OP_Compare.
10590 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d  .*/.case OP_Perm
105a0 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73  utation: {.  ass
105b0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
105c0 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
105d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
105e0 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d  p4.ai );.  aPerm
105f0 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  ute = pOp->p4.ai
10600 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
10610 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65   Opcode: Compare
10620 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
10630 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
10640 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50  1@P3] <-> r[P2@P
10650 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  3].**.** Compare
10660 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20   two vectors of 
10670 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67  registers in reg
10680 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d  (P1)..reg(P1+P3-
10690 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a  1) (call this.**
106a0 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64   vector "A") and
106b0 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67   in reg(P2)..reg
106c0 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e  (P2+P3-1) ("B").
106d0 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c    Save the resul
106e0 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  t of.** the comp
106f0 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62  arison for use b
10700 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75  y the next OP_Ju
10710 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a  mp instruct..**.
10720 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
10730 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
10740 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68  bit set, then th
10750 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61  e order of compa
10760 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65  rison is.** dete
10770 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f  rmined by the mo
10780 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72  st recent OP_Per
10790 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f  mutation operato
107a0 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50  r.  If the.** OP
107b0 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
107c0 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
107d0 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d  register are com
107e0 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74  pared in sequent
107f0 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a  ial.** order..**
10800 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49  .** P4 is a KeyI
10810 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68  nfo structure th
10820 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61  at defines colla
10830 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61  ting sequences a
10840 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72  nd sort.** order
10850 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72  s for the compar
10860 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75  ison.  The permu
10870 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74  tation applies t
10880 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f  o registers.** o
10890 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  nly.  The KeyInf
108a0 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75  o elements are u
108b0 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79  sed sequentially
108c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70  ..**.** The comp
108d0 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74  arison is a sort
108e0 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20   comparison, so 
108f0 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71  NULLs compare eq
10900 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72  ual,.** NULLs ar
10910 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62  e less than numb
10920 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65  ers, numbers are
10930 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e   less than strin
10940 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e  gs,.** and strin
10950 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  gs are less than
10960 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20   blobs..*/.case 
10970 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  OP_Compare: {.  
10980 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
10990 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20    int p1;.  int 
109a0 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49  p2;.  const KeyI
109b0 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
109c0 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c   int idx;.  Coll
109d0 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f  Seq *pColl;    /
109e0 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
109f0 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74  ence to use on t
10a00 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e  his term */.  in
10a10 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20  t bRev;         
10a20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53   /* True for DES
10a30 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64  CENDING sort ord
10a40 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f  er */..  if( (pO
10a50 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50  p->p5 & OPFLAG_P
10a60 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65  ERMUTE)==0 ) aPe
10a70 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d  rmute = 0;.  n =
10a80 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79   pOp->p3;.  pKey
10a90 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
10aa0 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
10ab0 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65  t( n>0 );.  asse
10ac0 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20  rt( pKeyInfo!=0 
10ad0 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  );.  p1 = pOp->p
10ae0 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
10af0 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  2;.#if SQLITE_DE
10b00 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75  BUG.  if( aPermu
10b10 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c  te ){.    int k,
10b20 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72   mx = 0;.    for
10b30 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20  (k=0; k<n; k++) 
10b40 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e  if( aPermute[k]>
10b50 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75  mx ) mx = aPermu
10b60 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72  te[k];.    asser
10b70 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78  t( p1>0 && p1+mx
10b80 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
10b90 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20  ursor)+1 );.    
10ba0 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
10bb0 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p2+mx<=(p->nMem-
10bc0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
10bd0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
10be0 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
10bf0 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  +n<=(p->nMem-p->
10c00 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
10c10 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
10c20 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  & p2+n<=(p->nMem
10c30 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
10c40 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
10c50 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
10c60 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
10c70 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20  i++){.    idx = 
10c80 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d  aPermute ? aPerm
10c90 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20  ute[i] : i;.    
10ca0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
10cb0 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  id(&aMem[p1+idx]
10cc0 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
10cd0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
10ce0 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p2+idx]) );.  
10cf0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
10d00 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70  (p1+idx, &aMem[p
10d10 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47  1+idx]);.    REG
10d20 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69  ISTER_TRACE(p2+i
10d30 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  dx, &aMem[p2+idx
10d40 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ]);.    assert( 
10d50 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  i<pKeyInfo->nFie
10d60 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20  ld );.    pColl 
10d70 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c  = pKeyInfo->aCol
10d80 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d  l[i];.    bRev =
10d90 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74   pKeyInfo->aSort
10da0 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43  Order[i];.    iC
10db0 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33  ompare = sqlite3
10dc0 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d  MemCompare(&aMem
10dd0 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b  [p1+idx], &aMem[
10de0 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b  p2+idx], pColl);
10df0 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72  .    if( iCompar
10e00 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62  e ){.      if( b
10e10 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d  Rev ) iCompare =
10e20 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20   -iCompare;.    
10e30 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
10e40 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20   }.  aPermute = 
10e50 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
10e60 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50  * Opcode: Jump P
10e70 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
10e80 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e  * Jump to the in
10e90 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64  struction at add
10ea0 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20  ress P1, P2, or 
10eb0 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  P3 depending on 
10ec0 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68  whether.** in th
10ed0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
10ee0 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63  _Compare instruc
10ef0 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74  tion the P1 vect
10f00 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e  or was less than
10f10 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72  .** equal to, or
10f20 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
10f30 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73  e P2 vector, res
10f40 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61  pectively..*/.ca
10f50 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20  se OP_Jump: {   
10f60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
10f70 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70  p */.  if( iComp
10f80 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56 64 62  are<0 ){.    Vdb
10f90 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 33  eBranchTaken(0,3
10fa0 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  ); pOp = &aOp[pO
10fb0 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 7d 65  p->p1 - 1];.  }e
10fc0 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65  lse if( iCompare
10fd0 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42  ==0 ){.    VdbeB
10fe0 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33 29 3b  ranchTaken(1,3);
10ff0 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
11000 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73  >p2 - 1];.  }els
11010 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
11020 68 54 61 6b 65 6e 28 32 2c 33 29 3b 20 70 4f 70  hTaken(2,3); pOp
11030 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 33 20   = &aOp[pOp->p3 
11040 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  - 1];.  }.  brea
11050 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11060 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20   And P1 P2 P3 * 
11070 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
11080 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72  [P3]=(r[P1] && r
11090 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  [P2]).**.** Take
110a0 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44   the logical AND
110b0 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
110c0 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
110d0 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69  nd P2 and.** wri
110e0 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  te the result in
110f0 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
11100 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
11110 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66  P1 or P2 is 0 (f
11120 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72  alse) then the r
11130 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20  esult is 0 even 
11140 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20  if.** the other 
11150 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20  input is NULL.  
11160 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20  A NULL and true 
11170 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76  or two NULLs giv
11180 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70  e.** a NULL outp
11190 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ut..*/./* Opcode
111a0 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  : Or P1 P2 P3 * 
111b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
111c0 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72  [P3]=(r[P1] || r
111d0 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  [P2]).**.** Take
111e0 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20   the logical OR 
111f0 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
11200 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
11210 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
11220 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72   the answer in r
11230 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
11240 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
11250 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20  r P2 is nonzero 
11260 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65 20  (true) then the 
11270 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72 75  result is 1 (tru
11280 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68  e).** even if th
11290 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
112a0 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
112b0 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20  nd false or two 
112c0 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20  NULLs.** give a 
112d0 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  NULL output..*/.
112e0 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20  case OP_And:    
112f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
11300 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31  e as TK_AND, in1
11310 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
11320 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20  ase OP_Or: {    
11330 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
11340 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20   as TK_OR, in1, 
11350 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
11360 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66  nt v1;    /* Lef
11370 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46  t operand:  0==F
11380 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
11390 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
113a0 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20  L */.  int v2;  
113b0 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61    /* Right opera
113c0 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d  nd: 0==FALSE, 1=
113d0 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57  =TRUE, 2==UNKNOW
113e0 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20  N or NULL */..  
113f0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
11400 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
11410 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
11420 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20  ull ){.    v1 = 
11430 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
11440 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v1 = sqlite3Vdbe
11450 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  IntValue(pIn1)!=
11460 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20  0;.  }.  pIn2 = 
11470 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
11480 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67    if( pIn2->flag
11490 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
114a0 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65      v2 = 2;.  }e
114b0 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71  lse{.    v2 = sq
114c0 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
114d0 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a  e(pIn2)!=0;.  }.
114e0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
114f0 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20  e==OP_And ){.   
11500 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
11510 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f  signed char and_
11520 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30  logic[] = { 0, 0
11530 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c  , 0, 0, 1, 2, 0,
11540 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   2, 2 };.    v1 
11550 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33  = and_logic[v1*3
11560 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +v2];.  }else{. 
11570 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
11580 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72  unsigned char or
11590 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
115a0 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32  1, 2, 1, 1, 1, 2
115b0 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 1, 2 };.    v1
115c0 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33   = or_logic[v1*3
115d0 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  +v2];.  }.  pOut
115e0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
115f0 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29  ];.  if( v1==2 )
11600 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  {.    MemSetType
11610 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
11620 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ull);.  }else{. 
11630 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76     pOut->u.i = v
11640 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  1;.    MemSetTyp
11650 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
11660 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Int);.  }.  brea
11670 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11680 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a   Not P1 P2 * * *
11690 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
116a0 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a  P2]= !r[P1].**.*
116b0 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
116c0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
116d0 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61  r P1 as a boolea
116e0 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20  n value.  Store 
116f0 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63  the.** boolean c
11700 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67  omplement in reg
11710 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74 68  ister P2.  If th
11720 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
11730 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55  ter P1 is .** NU
11740 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20  LL, then a NULL 
11750 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e  is stored in P2.
11760 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a  .*/.case OP_Not:
11770 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
11780 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
11790 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
117a0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
117b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
117c0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
117d0 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
117e0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
117f0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
11800 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11810 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  )==0 ){.    pOut
11820 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
11830 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
11840 20 3d 20 21 73 71 6c 69 74 65 33 56 64 62 65 49   = !sqlite3VdbeI
11850 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
11860 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11870 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74  * Opcode: BitNot
11880 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
11890 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
118a0 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e   ~r[P1].**.** In
118b0 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74  terpret the cont
118c0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
118d0 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  P1 as an integer
118e0 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
118f0 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  ones-complement 
11900 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  of the P1 value 
11910 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
11920 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a  .  If P1 holds.*
11930 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74  * a NULL then st
11940 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32  ore a NULL in P2
11950 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
11960 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
11970 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
11980 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75  _BITNOT, in1, ou
11990 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
119a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
119b0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
119c0 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
119d0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
119e0 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49  pOut);.  if( (pI
119f0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
11a00 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
11a10 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
11a20 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
11a30 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33 56  >u.i = ~sqlite3V
11a40 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
11a50 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
11a60 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e  }../* Opcode: On
11a70 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ce P1 P2 * * *.*
11a80 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 22  *.** Check the "
11a90 6f 6e 63 65 22 20 66 6c 61 67 20 6e 75 6d 62 65  once" flag numbe
11aa0 72 20 50 31 2e 20 49 66 20 69 74 20 69 73 20 73  r P1. If it is s
11ab0 65 74 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  et, jump to inst
11ac0 72 75 63 74 69 6f 6e 20 50 32 2e 20 0a 2a 2a 20  ruction P2. .** 
11ad0 4f 74 68 65 72 77 69 73 65 2c 20 73 65 74 20 74  Otherwise, set t
11ae0 68 65 20 66 6c 61 67 20 61 6e 64 20 66 61 6c 6c  he flag and fall
11af0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
11b00 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
11b10 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
11b20 72 64 73 2c 20 74 68 69 73 20 6f 70 63 6f 64 65  rds, this opcode
11b30 20 63 61 75 73 65 73 20 61 6c 6c 20 66 6f 6c 6c   causes all foll
11b40 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73 20 75 70  owing opcodes up
11b50 20 74 68 72 6f 75 67 68 20 50 32 0a 2a 2a 20 28   through P2.** (
11b60 62 75 74 20 6e 6f 74 20 69 6e 63 6c 75 64 69 6e  but not includin
11b70 67 20 50 32 29 20 74 6f 20 72 75 6e 20 6a 75 73  g P2) to run jus
11b80 74 20 6f 6e 63 65 20 61 6e 64 20 74 6f 20 62 65  t once and to be
11b90 20 73 6b 69 70 70 65 64 20 6f 6e 20 73 75 62 73   skipped on subs
11ba0 65 71 75 65 6e 74 0a 2a 2a 20 74 69 6d 65 73 20  equent.** times 
11bb0 74 68 72 6f 75 67 68 20 74 68 65 20 6c 6f 6f 70  through the loop
11bc0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 22 6f 6e 63  ..**.** All "onc
11bd0 65 22 20 66 6c 61 67 73 20 61 72 65 20 69 6e 69  e" flags are ini
11be0 74 69 61 6c 6c 79 20 63 6c 65 61 72 65 64 20 77  tially cleared w
11bf0 68 65 6e 65 76 65 72 20 61 20 70 72 65 70 61 72  henever a prepar
11c00 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20  ed statement.** 
11c10 66 69 72 73 74 20 62 65 67 69 6e 73 20 74 6f 20  first begins to 
11c20 72 75 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  run..*/.case OP_
11c30 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20  Once: {         
11c40 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
11c50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
11c60 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 29 3b  <p->nOnceFlag );
11c70 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
11c80 65 6e 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b  en(p->aOnceFlag[
11c90 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c 20 32 29 3b  pOp->p1]!=0, 2);
11ca0 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63 65 46  .  if( p->aOnceF
11cb0 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a  lag[pOp->p1] ){.
11cc0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
11cd0 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  _p2;.  }else{.  
11ce0 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70    p->aOnceFlag[p
11cf0 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20 7d  Op->p1] = 1;.  }
11d00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
11d10 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32  Opcode: If P1 P2
11d20 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
11d30 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
11d40 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
11d50 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20 54  r P1 is true.  T
11d60 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63  he value.** is c
11d70 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69  onsidered true i
11d80 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20  f it is numeric 
11d90 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49  and non-zero.  I
11da0 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
11db0 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65  n P1 is NULL the
11dc0 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
11dd0 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50  if and only if P
11de0 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a  3 is non-zero..*
11df0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  /./* Opcode: IfN
11e00 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ot P1 P2 P3 * *.
11e10 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
11e20 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
11e30 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
11e40 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75  False.  The valu
11e50 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72  e.** is consider
11e60 65 64 20 66 61 6c 73 65 20 69 66 20 69 74 20 68  ed false if it h
11e70 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c  as a numeric val
11e80 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20  ue of zero.  If 
11e90 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
11ea0 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
11eb0 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
11ec0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20   and only if P3 
11ed0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a  is non-zero..*/.
11ee0 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20  case OP_If:     
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
11f00 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65  ump, in1 */.case
11f10 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20   OP_IfNot: {    
11f20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
11f30 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b   in1 */.  int c;
11f40 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
11f50 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
11f60 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11f70 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20  M_Null ){.    c 
11f80 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c  = pOp->p3;.  }el
11f90 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  se{.#ifdef SQLIT
11fa0 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
11fb0 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71  POINT.    c = sq
11fc0 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
11fd0 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73  e(pIn1)!=0;.#els
11fe0 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  e.    c = sqlite
11ff0 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
12000 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69  In1)!=0.0;.#endi
12010 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  f.    if( pOp->o
12020 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20  pcode==OP_IfNot 
12030 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20  ) c = !c;.  }.  
12040 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
12050 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  c!=0, 2);.  if( 
12060 63 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  c ){.    goto ju
12070 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
12080 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
12090 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50  ode: IsNull P1 P
120a0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
120b0 73 69 73 3a 20 20 69 66 20 72 5b 50 31 5d 3d 3d  sis:  if r[P1]==
120c0 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  NULL goto P2.**.
120d0 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
120e0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
120f0 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c  gister P1 is NUL
12100 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73  L..*/.case OP_Is
12110 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Null: {         
12120 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
12130 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  _ISNULL, jump, i
12140 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
12150 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
12160 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12170 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
12180 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32   MEM_Null)!=0, 2
12190 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
121a0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
121b0 29 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  )!=0 ){.    goto
121c0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
121d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
121e0 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20  Opcode: NotNull 
121f0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
12200 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
12210 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a  ]!=NULL goto P2.
12220 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
12230 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
12240 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
12250 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63  not NULL.  .*/.c
12260 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20  ase OP_NotNull: 
12270 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
12280 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55  same as TK_NOTNU
12290 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
122a0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
122b0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65  pOp->p1];.  Vdbe
122c0 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49  BranchTaken( (pI
122d0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
122e0 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20  Null)==0, 2);.  
122f0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
12300 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
12310 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
12320 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
12330 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
12340 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  e: Column P1 P2 
12350 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
12360 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 50 58 0a  psis:  r[P3]=PX.
12370 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
12380 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75  the data that cu
12390 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
123a0 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65  o as a structure
123b0 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20   built using.** 
123c0 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  the MakeRecord i
123d0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65  nstruction.  (Se
123e0 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  e the MakeRecord
123f0 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
12400 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d  tional.** inform
12410 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
12420 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61  format of the da
12430 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68  ta.)  Extract th
12440 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a  e P2-th column.*
12450 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f  * from this reco
12460 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  rd.  If there ar
12470 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b  e less that (P2+
12480 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e  1) .** values in
12490 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74   the record, ext
124a0 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a  ract a NULL..**.
124b0 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74  ** The value ext
124c0 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64  racted is stored
124d0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
124e0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f  .**.** If the co
124f0 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65  lumn contains fe
12500 77 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c  wer than P2 fiel
12510 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74  ds, then extract
12520 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a   a NULL.  Or,.**
12530 20 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   if the P4 argum
12540 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20  ent is a P4_MEM 
12550 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  use the value of
12560 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
12570 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c   as.** the resul
12580 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
12590 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48  OPFLAG_CLEARCACH
125a0 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20  E bit is set on 
125b0 50 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70  P5 and P1 is a p
125c0 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
125d0 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  or,.** then the 
125e0 63 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72  cache of the cur
125f0 73 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69  sor is reset pri
12600 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67  or to extracting
12610 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20   the column..** 
12620 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c  The first OP_Col
12630 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73  umn against a ps
12640 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72  eudo-table after
12650 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
12660 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67  e content.** reg
12670 69 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65  ister has change
12680 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68  d should have th
12690 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  is bit set..**.*
126a0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
126b0 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
126c0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62  FLAG_TYPEOFARG b
126d0 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50  its are set on P
126e0 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65  5 when.** the re
126f0 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65  sult is guarante
12700 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73  ed to only be us
12710 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
12720 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29  nt of a length()
12730 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20  .** or typeof() 
12740 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63  function, respec
12750 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61  tively.  The loa
12760 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c  ding of large bl
12770 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b  obs can be.** sk
12780 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68  ipped for length
12790 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65  () and all conte
127a0 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62  nt loading can b
127b0 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79  e skipped for ty
127c0 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  peof()..*/.case 
127d0 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69  OP_Column: {.  i
127e0 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64 payloadSize64
127f0 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62  ; /* Number of b
12800 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
12810 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  rd */.  int p2; 
12820 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f             /* co
12830 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72  lumn number to r
12840 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62  etrieve */.  Vdb
12850 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
12860 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
12870 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72  or */.  BtCursor
12880 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68   *pCrsr;   /* Th
12890 65 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a  e BTree cursor *
128a0 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74  /.  u32 *aOffset
128b0 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65  ;      /* aOffse
128c0 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74  t[i] is offset t
128d0 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20  o start of data 
128e0 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20  for i-th column 
128f0 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20  */.  int len;   
12900 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
12910 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65 72  ength of the ser
12920 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72  ialized data for
12930 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20   the column */. 
12940 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
12950 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
12960 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  ter */.  Mem *pD
12970 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57  est;        /* W
12980 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68  here to write th
12990 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75  e extracted valu
129a0 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b  e */.  Mem sMem;
129b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
129c0 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63   storing the rec
129d0 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
129e0 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  d */.  const u8 
129f0 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50 61 72  *zData;   /* Par
12a00 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
12a10 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
12a20 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64  .  const u8 *zHd
12a30 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e  r;    /* Next un
12a40 70 61 72 73 65 64 20 62 79 74 65 20 6f 66 20 74  parsed byte of t
12a50 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 63  he header */.  c
12a60 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48 64 72  onst u8 *zEndHdr
12a70 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20  ; /* Pointer to 
12a80 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72  first byte after
12a90 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
12aa0 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20   u32 offset;    
12ab0 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
12ac0 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20  to the data */. 
12ad0 20 75 33 32 20 73 7a 46 69 65 6c 64 3b 20 20 20   u32 szField;   
12ae0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12af0 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f   bytes in the co
12b00 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 65 6c 64  ntent of a field
12b10 20 2a 2f 0a 20 20 75 33 32 20 61 76 61 69 6c 3b   */.  u32 avail;
12b20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12b30 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61  er of bytes of a
12b40 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f  vailable data */
12b50 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20  .  u32 t;       
12b60 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20        /* A type 
12b70 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65  code from the re
12b80 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20  cord header */. 
12b90 20 75 31 36 20 66 78 3b 20 20 20 20 20 20 20 20   u16 fx;        
12ba0 20 20 20 20 2f 2a 20 70 44 65 73 74 2d 3e 66 6c      /* pDest->fl
12bb0 61 67 73 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d  ags value */.  M
12bc0 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20  em *pReg;       
12bd0 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65    /* PseudoTable
12be0 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20   input register 
12bf0 2a 2f 0a 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  */..  p2 = pOp->
12c00 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
12c10 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
12c20 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
12c30 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
12c40 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
12c50 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
12c60 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
12c70 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t);.  assert( pO
12c80 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
12c90 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
12ca0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
12cb0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
12cc0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
12cd0 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e   assert( p2<pC->
12ce0 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 4f 66 66  nField );.  aOff
12cf0 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65  set = pC->aOffse
12d00 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
12d10 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
12d20 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20 70 43  BLE.  assert( pC
12d30 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d 3d 30  ->pVtabCursor==0
12d40 20 29 3b 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e   ); /* OP_Column
12d50 20 6e 65 76 65 72 20 63 61 6c 6c 65 64 20 6f 6e   never called on
12d60 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
12d70 2f 0a 23 65 6e 64 69 66 0a 20 20 70 43 72 73 72  /.#endif.  pCrsr
12d80 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
12d90 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
12da0 3d 30 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f  =0 || pC->pseudo
12db0 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 20 2f 2a  TableReg>0 ); /*
12dc0 20 70 43 72 73 72 20 4e 55 4c 4c 20 6f 6e 20 50   pCrsr NULL on P
12dd0 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a 20  seudoTables */. 
12de0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
12df0 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  0 || pC->nullRow
12e00 20 29 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   );          /* 
12e10 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 6f 6e 20 50  pC->nullRow on P
12e20 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a 0a  seudoTables */..
12e30 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73    /* If the curs
12e40 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61 6c  or cache is stal
12e50 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74  e, bring it up-t
12e60 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63 20 3d  o-date */.  rc =
12e70 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
12e80 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
12e90 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
12ea0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
12eb0 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68  ;.  if( pC->cach
12ec0 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68  eStatus!=p->cach
12ed0 65 43 74 72 20 29 7b 0a 20 20 20 20 69 66 28 20  eCtr ){.    if( 
12ee0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
12ef0 20 20 20 20 20 69 66 28 20 70 43 72 73 72 3d 3d       if( pCrsr==
12f00 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
12f10 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
12f20 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a 20 20 20  ableReg>0 );.   
12f30 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65       pReg = &aMe
12f40 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  m[pC->pseudoTabl
12f50 65 52 65 67 5d 3b 0a 20 20 20 20 20 20 20 20 61  eReg];.        a
12f60 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61  ssert( pReg->fla
12f70 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
12f80 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
12f90 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67   memIsValid(pReg
12fa0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ) );.        pC-
12fb0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70  >payloadSize = p
12fc0 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c  C->szRow = avail
12fd0 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20   = pReg->n;.    
12fe0 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28      pC->aRow = (
12ff0 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20  u8*)pReg->z;.   
13000 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13010 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
13020 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
13030 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
13040 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
13050 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
13060 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72       assert( pCr
13070 73 72 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  sr );.      if( 
13080 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
13090 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
130a0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
130b0 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
130c0 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56  r) );.        VV
130d0 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c  A_ONLY(rc =) sql
130e0 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
130f0 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64  (pCrsr, &payload
13100 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 20  Size64);.       
13110 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
13120 49 54 45 5f 4f 4b 20 29 3b 20 2f 2a 20 54 72 75  ITE_OK ); /* Tru
13130 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72  e because of Cur
13140 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c  sorMoveto() call
13150 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20   above */.      
13160 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72 65    /* sqlite3Btre
13170 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29 20  eParseCellPtr() 
13180 75 73 65 73 20 67 65 74 56 61 72 69 6e 74 33 32  uses getVarint32
13190 28 29 20 74 6f 20 65 78 74 72 61 63 74 20 74 68  () to extract th
131a0 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 61 79  e.        ** pay
131b0 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74  load size, so it
131c0 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66   is impossible f
131d0 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  or payloadSize64
131e0 20 74 6f 20 62 65 0a 20 20 20 20 20 20 20 20 2a   to be.        *
131f0 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32  * larger than 32
13200 20 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20   bits. */.      
13210 20 20 61 73 73 65 72 74 28 20 28 70 61 79 6c 6f    assert( (paylo
13220 61 64 53 69 7a 65 36 34 20 26 20 53 51 4c 49 54  adSize64 & SQLIT
13230 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75 36 34  E_MAX_U32)==(u64
13240 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 29  )payloadSize64 )
13250 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
13260 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ow = sqlite3Btre
13270 65 4b 65 79 46 65 74 63 68 28 70 43 72 73 72 2c  eKeyFetch(pCrsr,
13280 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20   &avail);.      
13290 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a    pC->payloadSiz
132a0 65 20 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64  e = (u32)payload
132b0 53 69 7a 65 36 34 3b 0a 20 20 20 20 20 20 7d 65  Size64;.      }e
132c0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73  lse{.        ass
132d0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
132e0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
132f0 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20  Crsr) );.       
13300 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
13310 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
13320 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 43 2d  Size(pCrsr, &pC-
13330 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20  >payloadSize);. 
13340 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72         assert( r
13350 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
13360 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20    /* DataSize() 
13370 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
13380 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
13390 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  = sqlite3BtreeDa
133a0 74 61 46 65 74 63 68 28 70 43 72 73 72 2c 20 26  taFetch(pCrsr, &
133b0 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a  avail);.      }.
133c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76        assert( av
133d0 61 69 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f  ail<=65536 );  /
133e0 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73  * Maximum page s
133f0 69 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a  ize is 64KiB */.
13400 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61        if( pC->pa
13410 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33  yloadSize <= (u3
13420 32 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20  2)avail ){.     
13430 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70     pC->szRow = p
13440 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a  C->payloadSize;.
13450 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
13460 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d       pC->szRow =
13470 20 61 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a   avail;.      }.
13480 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61        if( pC->pa
13490 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32  yloadSize > (u32
134a0 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
134b0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
134c0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
134d0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20   too_big;.      
134e0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  }.    }.    pC->
134f0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d  cacheStatus = p-
13500 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70  >cacheCtr;.    p
13510 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
13520 67 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e  getVarint32(pC->
13530 61 52 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20  aRow, offset);. 
13540 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65     pC->nHdrParse
13550 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66 73  d = 0;.    aOffs
13560 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a  et[0] = offset;.
13570 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  .    /* Make sur
13580 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  e a corrupt data
13590 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76  base has not giv
135a0 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a  en us an oversiz
135b0 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a  e header..    **
135c0 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20   Do this now to 
135d0 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a  avoid an oversiz
135e0 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
135f0 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ion..    **.    
13600 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20  ** Type entries 
13610 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31  can be between 1
13620 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63   and 5 bytes eac
13630 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20  h.  But 4 and 5 
13640 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70 65  byte.    ** type
13650 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61  s use so much da
13660 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68  ta space that th
13670 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  ere can only be 
13680 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20  4096 and 32 of. 
13690 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70     ** them, resp
136a0 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68  ectively.  So th
136b0 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72  e maximum header
136c0 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20   length results 
136d0 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d  from a.    ** 3-
136e0 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65 61  byte type for ea
136f0 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75  ch of the maximu
13700 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d  m of 32768 colum
13710 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20  ns plus three.  
13720 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73    ** extra bytes
13730 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20   for the header 
13740 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20  length itself.  
13750 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38  32768*3 + 3 = 98
13760 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  307..    */.    
13770 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33  if( offset > 983
13780 30 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70  07 || offset > p
13790 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29  C->payloadSize )
137a0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
137b0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
137c0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  ;.      goto op_
137d0 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
137e0 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 61 76 61    }..    if( ava
137f0 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20 20 20  il<offset ){.   
13800 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64     /* pC->aRow d
13810 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20  oes not have to 
13820 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20  hold the entire 
13830 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73  row, but it does
13840 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20   at least.      
13850 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72  ** need to cover
13860 20 74 68 65 20 68 65 61 64 65 72 20 6f 66 20 74   the header of t
13870 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70  he record.  If p
13880 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74  C->aRow does not
13890 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a   contain.      *
138a0 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68  * the complete h
138b0 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20  eader, then set 
138c0 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63  it to zero, forc
138d0 69 6e 67 20 74 68 65 20 68 65 61 64 65 72 20 74  ing the header t
138e0 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79  o be.      ** dy
138f0 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
13900 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43  ted. */.      pC
13910 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ->aRow = 0;.    
13920 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b    pC->szRow = 0;
13930 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 54  .    }..    /* T
13940 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74  he following got
13950 6f 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  o is an optimiza
13960 74 69 6f 6e 2e 20 20 49 74 20 63 61 6e 20 62 65  tion.  It can be
13970 20 6f 6d 69 74 74 65 64 20 61 6e 64 0a 20 20 20   omitted and.   
13980 20 2a 2a 20 65 76 65 72 79 74 68 69 6e 67 20 77   ** everything w
13990 69 6c 6c 20 73 74 69 6c 6c 20 77 6f 72 6b 2e 20  ill still work. 
139a0 20 42 75 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69   But OP_Column i
139b0 73 20 6d 65 61 73 75 72 61 62 6c 79 20 66 61 73  s measurably fas
139c0 74 65 72 0a 20 20 20 20 2a 2a 20 62 79 20 73 6b  ter.    ** by sk
139d0 69 70 70 69 6e 67 20 74 68 65 20 73 75 62 73 65  ipping the subse
139e0 71 75 65 6e 74 20 63 6f 6e 64 69 74 69 6f 6e 61  quent conditiona
139f0 6c 2c 20 77 68 69 63 68 20 69 73 20 61 6c 77 61  l, which is alwa
13a00 79 73 20 74 72 75 65 2e 0a 20 20 20 20 2a 2f 0a  ys true..    */.
13a10 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
13a20 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
13a30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  ;         /* Con
13a40 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64  ditional skipped
13a50 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f   */.    goto op_
13a60 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64  column_read_head
13a70 65 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61  er;.  }..  /* Ma
13a80 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61 73 74  ke sure at least
13a90 20 74 68 65 20 66 69 72 73 74 20 70 32 2b 31 20   the first p2+1 
13aa0 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20 68  entries of the h
13ab0 65 61 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a  eader have been.
13ac0 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20    ** parsed and 
13ad0 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f  valid informatio
13ae0 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b  n is in aOffset[
13af0 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b  ] and pC->aType[
13b00 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 43  ]..  */.  if( pC
13b10 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
13b20 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
13b30 65 72 65 20 69 73 20 6d 6f 72 65 20 68 65 61 64  ere is more head
13b40 65 72 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  er available for
13b50 20 70 61 72 73 69 6e 67 20 69 6e 20 74 68 65 20   parsing in the 
13b60 72 65 63 6f 72 64 2c 20 74 72 79 0a 20 20 20 20  record, try.    
13b70 2a 2a 20 74 6f 20 65 78 74 72 61 63 74 20 61 64  ** to extract ad
13b80 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20  ditional fields 
13b90 75 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  up through the p
13ba0 32 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a 20 20  2+1-th field .  
13bb0 20 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75    */.    op_colu
13bc0 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3a 0a  mn_read_header:.
13bd0 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72      if( pC->iHdr
13be0 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30  Offset<aOffset[0
13bf0 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61  ] ){.      /* Ma
13c00 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f  ke sure zData po
13c10 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f  ints to enough o
13c20 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
13c30 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72  cover the header
13c40 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  . */.      if( p
13c50 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20  C->aRow==0 ){.  
13c60 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d        memset(&sM
13c70 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d  em, 0, sizeof(sM
13c80 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63  em));.        rc
13c90 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
13ca0 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
13cb0 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c  , 0, aOffset[0],
13cc0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ce0 20 20 20 20 20 20 20 21 70 43 2d 3e 69 73 54 61         !pC->isTa
13cf0 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  ble, &sMem);.   
13d00 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
13d10 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
13d20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
13d30 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  mn_error;.      
13d40 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 44 61 74    }.        zDat
13d50 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b  a = (u8*)sMem.z;
13d60 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
13d70 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43        zData = pC
13d80 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a  ->aRow;.      }.
13d90 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c    .      /* Fill
13da0 20 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d   in pC->aType[i]
13db0 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20   and aOffset[i] 
13dc0 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74  values through t
13dd0 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20  he p2-th field. 
13de0 2a 2f 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d  */.      i = pC-
13df0 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20  >nHdrParsed;.   
13e00 20 20 20 6f 66 66 73 65 74 20 3d 20 61 4f 66 66     offset = aOff
13e10 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48  set[i];.      zH
13e20 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d  dr = zData + pC-
13e30 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20 20  >iHdrOffset;.   
13e40 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61     zEndHdr = zDa
13e50 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b  ta + aOffset[0];
13e60 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69  .      assert( i
13e70 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e  <=p2 && zHdr<zEn
13e80 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20 64 6f  dHdr );.      do
13e90 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 48  {.        if( zH
13ea0 64 72 5b 30 5d 3c 30 78 38 30 20 29 7b 0a 20 20  dr[0]<0x80 ){.  
13eb0 20 20 20 20 20 20 20 20 74 20 3d 20 7a 48 64 72          t = zHdr
13ec0 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 7a  [0];.          z
13ed0 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  Hdr++;.        }
13ee0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
13ef0 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47  zHdr += sqlite3G
13f00 65 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c  etVarint32(zHdr,
13f10 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a   &t);.        }.
13f20 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70          pC->aTyp
13f30 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20  e[i] = t;.      
13f40 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c 69    szField = sqli
13f50 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
13f60 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20  eLen(t);.       
13f70 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46 69 65   offset += szFie
13f80 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ld;.        if( 
13f90 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64 20 29  offset<szField )
13fa0 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 66  {  /* True if of
13fb0 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a  fset overflows *
13fc0 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  /.          zHdr
13fd0 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b 20   = &zEndHdr[1]; 
13fe0 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c 49 54   /* Forces SQLIT
13ff0 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75 72 6e  E_CORRUPT return
14000 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20 20   below */.      
14010 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
14020 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 2b 2b     }.        i++
14030 3b 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65  ;.        aOffse
14040 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20  t[i] = offset;. 
14050 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d       }while( i<=
14060 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48  p2 && zHdr<zEndH
14070 64 72 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e  dr );.      pC->
14080 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a  nHdrParsed = i;.
14090 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66        pC->iHdrOf
140a0 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64  fset = (u32)(zHd
140b0 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20  r - zData);.    
140c0 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d    if( pC->aRow==
140d0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
140e0 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
140f0 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  se(&sMem);.     
14100 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20     sMem.flags = 
14110 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
14120 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 54 68  }.  .      /* Th
14130 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f 72 72  e record is corr
14140 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68  upt if any of th
14150 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
14160 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a 20 28  true:.      ** (
14170 31 29 20 74 68 65 20 62 79 74 65 73 20 6f 66 20  1) the bytes of 
14180 74 68 65 20 68 65 61 64 65 72 20 65 78 74 65 6e  the header exten
14190 64 20 70 61 73 74 20 74 68 65 20 64 65 63 6c 61  d past the decla
141a0 72 65 64 20 68 65 61 64 65 72 20 73 69 7a 65 0a  red header size.
141b0 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
141c0 20 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 29    (zHdr>zEndHdr)
141d0 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74 68  .      ** (2) th
141e0 65 20 65 6e 74 69 72 65 20 68 65 61 64 65 72 20  e entire header 
141f0 77 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f 74  was used but not
14200 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75 73   all data was us
14210 65 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  ed.      **     
14220 20 20 20 20 20 28 7a 48 64 72 3d 3d 7a 45 6e 64       (zHdr==zEnd
14230 48 64 72 20 26 26 20 6f 66 66 73 65 74 21 3d 70  Hdr && offset!=p
14240 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a  C->payloadSize).
14250 20 20 20 20 20 20 2a 2a 20 28 33 29 20 74 68 65        ** (3) the
14260 20 65 6e 64 20 6f 66 20 74 68 65 20 64 61 74 61   end of the data
14270 20 65 78 74 65 6e 64 73 20 62 65 79 6f 6e 64 20   extends beyond 
14280 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
14290 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2a 20  ecord..      ** 
142a0 20 20 20 20 20 20 20 20 20 28 6f 66 66 73 65 74           (offset
142b0 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
142c0 7a 65 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ze).      */.   
142d0 20 20 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45     if( (zHdr>=zE
142e0 6e 64 48 64 72 20 26 26 20 28 7a 48 64 72 3e 7a  ndHdr && (zHdr>z
142f0 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65 74  EndHdr || offset
14300 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  !=pC->payloadSiz
14310 65 29 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f  e)).       || (o
14320 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c  ffset > pC->payl
14330 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29  oadSize).      )
14340 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
14350 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
14360 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  PT;.        goto
14370 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72   op_column_error
14380 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
14390 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72  .    /* If after
143a0 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61   trying to extra
143b0 63 74 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66  ct new entries f
143c0 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20  rom the header, 
143d0 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a 20 20  nHdrParsed is.  
143e0 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75    ** still not u
143f0 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65  p to p2, that me
14400 61 6e 73 20 74 68 61 74 20 74 68 65 20 72 65 63  ans that the rec
14410 6f 72 64 20 68 61 73 20 66 65 77 65 72 20 74 68  ord has fewer th
14420 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c  an p2.    ** col
14430 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65  umns.  So the re
14440 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74  sult will be eit
14450 68 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  her the default 
14460 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e  value or a NULL.
14470 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
14480 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
14490 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  p2 ){.      if( 
144a0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
144b0 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  MEM ){.        s
144c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
144d0 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
144e0 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
144f0 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20  M_Static);.     
14500 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
14510 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
14520 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
14530 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f      }.      goto
14540 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
14550 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20      }.  }..  /* 
14560 45 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74  Extract the cont
14570 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31  ent for the p2+1
14580 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e  -th column.  Con
14590 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20  trol can only.  
145a0 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  ** reach this po
145b0 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70  int if aOffset[p
145c0 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31  2], aOffset[p2+1
145d0 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65  ], and pC->aType
145e0 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c  [p2] are.  ** al
145f0 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20  l valid..  */.  
14600 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e  assert( p2<pC->n
14610 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61  HdrParsed );.  a
14620 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
14630 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  E_OK );.  assert
14640 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
14650 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
14660 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20  pDest) );.  if( 
14670 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
14680 44 65 73 74 29 20 29 20 73 71 6c 69 74 65 33 56  Dest) ) sqlite3V
14690 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
146a0 65 73 74 29 3b 0a 20 20 74 20 3d 20 70 43 2d 3e  est);.  t = pC->
146b0 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 69 66 28  aType[p2];.  if(
146c0 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66   pC->szRow>=aOff
146d0 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20  set[p2+1] ){.   
146e0 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
146f0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72  common case wher
14700 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f  e the desired co
14710 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68  ntent fits on th
14720 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a  e original.    *
14730 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74  * page - where t
14740 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f  he content is no
14750 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77  t on an overflow
14760 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 73 71 6c   page */.    sql
14770 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
14780 74 28 70 43 2d 3e 61 52 6f 77 2b 61 4f 66 66 73  t(pC->aRow+aOffs
14790 65 74 5b 70 32 5d 2c 20 74 2c 20 70 44 65 73 74  et[p2], t, pDest
147a0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
147b0 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 68  /* This branch h
147c0 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e  appens only when
147d0 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f   content is on o
147e0 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f  verflow pages */
147f0 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e  .    if( ((pOp->
14800 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e  p5 & (OPFLAG_LEN
14810 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59  GTHARG|OPFLAG_TY
14820 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20  PEOFARG))!=0.   
14830 20 20 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31         && ((t>=1
14840 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c  2 && (t&1)==0) |
14850 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  | (pOp->p5 & OPF
14860 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d  LAG_TYPEOFARG)!=
14870 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e  0)).     || (len
14880 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
14890 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d  rialTypeLen(t))=
148a0 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  =0.    ){.      
148b0 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72  /* Content is ir
148c0 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20 20  relevant for.   
148d0 20 20 20 2a 2a 20 20 20 20 31 2e 20 74 68 65 20     **    1. the 
148e0 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
148f0 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 32  n,.      **    2
14900 2e 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20  . the length(X) 
14910 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20 69 73  function if X is
14920 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20   a blob, and.   
14930 20 20 20 2a 2a 20 20 20 20 33 2e 20 69 66 20 74     **    3. if t
14940 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74  he content lengt
14950 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20  h is zero..     
14960 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67 68 74 20   ** So we might 
14970 61 73 20 77 65 6c 6c 20 75 73 65 20 62 6f 67 75  as well use bogu
14980 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72  s content rather
14990 20 74 68 61 6e 20 72 65 61 64 69 6e 67 0a 20 20   than reading.  
149a0 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66      ** content f
149b0 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c 4c 20  rom disk.  NULL 
149c0 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 74 68  will work for th
149d0 65 20 76 61 6c 75 65 20 66 6f 72 20 73 74 72 69  e value for stri
149e0 6e 67 73 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  ngs.      ** and
149f0 20 62 6c 6f 62 73 20 61 6e 64 20 77 68 61 74 65   blobs and whate
14a00 76 65 72 20 69 73 20 69 6e 20 74 68 65 20 70 61  ver is in the pa
14a10 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61 72 69  yloadSize64 vari
14a20 61 62 6c 65 0a 20 20 20 20 20 20 2a 2a 20 77 69  able.      ** wi
14a30 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76 65 72  ll work for ever
14a40 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 2a 2f 0a  ything else. */.
14a50 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
14a60 65 53 65 72 69 61 6c 47 65 74 28 74 3c 3d 31 33  eSerialGet(t<=13
14a70 20 3f 20 28 75 38 2a 29 26 70 61 79 6c 6f 61 64   ? (u8*)&payload
14a80 53 69 7a 65 36 34 20 3a 20 30 2c 20 74 2c 20 70  Size64 : 0, t, p
14a90 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
14aa0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
14ab0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
14ac0 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66  tree(pCrsr, aOff
14ad0 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 21 70  set[p2], len, !p
14ae0 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20 20 20  C->isTable,.    
14af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
14b10 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69 66 28  Dest);.      if(
14b20 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
14b30 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  {.        goto o
14b40 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a  p_column_error;.
14b50 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
14b60 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
14b70 65 74 28 28 63 6f 6e 73 74 20 75 38 2a 29 70 44  et((const u8*)pD
14b80 65 73 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74  est->z, t, pDest
14b90 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  );.      pDest->
14ba0 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70  flags &= ~MEM_Ep
14bb0 68 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  hem;.    }.  }. 
14bc0 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e   pDest->enc = en
14bd0 63 6f 64 69 6e 67 3b 0a 0a 6f 70 5f 63 6f 6c 75  coding;..op_colu
14be0 6d 6e 5f 6f 75 74 3a 0a 20 20 2f 2a 20 49 66 20  mn_out:.  /* If 
14bf0 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  the column value
14c00 20 69 73 20 61 6e 20 65 70 68 65 6d 65 72 61 6c   is an ephemeral
14c10 20 73 74 72 69 6e 67 2c 20 67 6f 20 61 68 65 61   string, go ahea
14c20 64 20 61 6e 64 20 70 65 72 73 69 73 74 0a 20 20  d and persist.  
14c30 2a 2a 20 74 68 61 74 20 73 74 72 69 6e 67 20 69  ** that string i
14c40 6e 20 63 61 73 65 20 74 68 65 20 63 75 72 73 6f  n case the curso
14c50 72 20 6d 6f 76 65 73 20 62 65 66 6f 72 65 20 74  r moves before t
14c60 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20  he column value 
14c70 69 73 0a 20 20 2a 2a 20 75 73 65 64 2e 20 20 54  is.  ** used.  T
14c80 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64  he following cod
14c90 65 20 64 6f 65 73 20 74 68 65 20 65 71 75 69 76  e does the equiv
14ca0 61 6c 65 6e 74 20 6f 66 20 44 65 65 70 68 65 6d  alent of Deephem
14cb0 65 72 61 6c 69 7a 65 28 29 0a 20 20 2a 2a 20 62  eralize().  ** b
14cc0 75 74 20 64 6f 65 73 20 69 74 20 66 61 73 74 65  ut does it faste
14cd0 72 2e 20 2a 2f 0a 20 20 69 66 28 20 28 70 44 65  r. */.  if( (pDe
14ce0 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  st->flags & MEM_
14cf0 45 70 68 65 6d 29 21 3d 30 20 26 26 20 70 44 65  Ephem)!=0 && pDe
14d00 73 74 2d 3e 7a 20 29 7b 0a 20 20 20 20 66 78 20  st->z ){.    fx 
14d10 3d 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26  = pDest->flags &
14d20 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
14d30 6f 62 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ob);.    assert(
14d40 20 66 78 21 3d 30 20 29 3b 0a 20 20 20 20 7a 44   fx!=0 );.    zD
14d50 61 74 61 20 3d 20 28 63 6f 6e 73 74 20 75 38 2a  ata = (const u8*
14d60 29 70 44 65 73 74 2d 3e 7a 3b 0a 20 20 20 20 6c  )pDest->z;.    l
14d70 65 6e 20 3d 20 70 44 65 73 74 2d 3e 6e 3b 0a 20  en = pDest->n;. 
14d80 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
14d90 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73  beMemClearAndRes
14da0 69 7a 65 28 70 44 65 73 74 2c 20 6c 65 6e 2b 32  ize(pDest, len+2
14db0 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
14dc0 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73  .    memcpy(pDes
14dd0 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e  t->z, zData, len
14de0 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  );.    pDest->z[
14df0 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 70 44  len] = 0;.    pD
14e00 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20  est->z[len+1] = 
14e10 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  0;.    pDest->fl
14e20 61 67 73 20 3d 20 66 78 7c 4d 45 4d 5f 54 65 72  ags = fx|MEM_Ter
14e30 6d 3b 0a 20 20 7d 0a 6f 70 5f 63 6f 6c 75 6d 6e  m;.  }.op_column
14e40 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44 41 54 45  _error:.  UPDATE
14e50 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
14e60 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52  est);.  REGISTER
14e70 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
14e80 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b  pDest);.  break;
14e90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
14ea0 66 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20  ffinity P1 P2 * 
14eb0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
14ec0 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31 40  : affinity(r[P1@
14ed0 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79  P2]).**.** Apply
14ee0 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61   affinities to a
14ef0 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67   range of P2 reg
14f00 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
14f10 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50  with P1..**.** P
14f20 34 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68  4 is a string th
14f30 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74  at is P2 charact
14f40 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74  ers long. The nt
14f50 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  h character of t
14f60 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64  he.** string ind
14f70 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d  icates the colum
14f80 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20  n affinity that 
14f90 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66  should be used f
14fa0 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65  or the nth.** me
14fb0 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65  mory cell in the
14fc0 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20   range..*/.case 
14fd0 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20  OP_Affinity: {. 
14fe0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66   const char *zAf
14ff0 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65  finity;   /* The
15000 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20   affinity to be 
15010 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61  applied */.  cha
15020 72 20 63 41 66 66 3b 20 20 20 20 20 20 20 20 20  r cAff;         
15030 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c        /* A singl
15040 65 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 61  e character of a
15050 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41  ffinity */..  zA
15060 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
15070 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  4.z;.  assert( z
15080 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20  Affinity!=0 );. 
15090 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
150a0 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29  ty[pOp->p2]==0 )
150b0 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
150c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69  [pOp->p1];.  whi
150d0 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41  le( (cAff = *(zA
150e0 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29  ffinity++))!=0 )
150f0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  {.    assert( pI
15100 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28  n1 <= &p->aMem[(
15110 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
15120 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
15130 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
15140 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c  In1) );.    appl
15150 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
15160 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  cAff, encoding);
15170 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
15180 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
15190 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f  Opcode: MakeReco
151a0 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  rd P1 P2 P3 P4 *
151b0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
151c0 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50  P3]=mkrec(r[P1@P
151d0 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72  2]).**.** Conver
151e0 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20 62  t P2 registers b
151f0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31  eginning with P1
15200 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72   into the [recor
15210 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65  d format].** use
15220 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72   as a data recor
15230 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  d in a database 
15240 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65  table or as a ke
15250 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78  y.** in an index
15260 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  .  The OP_Column
15270 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f   opcode can deco
15280 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61  de the record la
15290 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  ter..**.** P4 ma
152a0 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68  y be a string th
152b0 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74  at is P2 charact
152c0 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e  ers long.  The n
152d0 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
152e0 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
152f0 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
15300 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
15310 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
15320 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66  for the nth.** f
15330 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65  ield of the inde
15340 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  x key..**.** The
15350 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68   mapping from ch
15360 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e  aracter to affin
15370 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79 20  ity is given by 
15380 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a  the SQLITE_AFF_.
15390 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  ** macros define
153a0 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68  d in sqliteInt.h
153b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
153c0 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69   NULL then all i
153d0 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76 65  ndex fields have
153e0 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 42 4c   the affinity BL
153f0 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  OB..*/.case OP_M
15400 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75  akeRecord: {.  u
15410 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20  8 *zNewRecord;  
15420 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65        /* A buffe
15430 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61  r to hold the da
15440 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72  ta for the new r
15450 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
15460 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  pRec;           
15470 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63    /* The new rec
15480 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61  ord */.  u64 nDa
15490 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ta;             
154a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
154b0 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65  es of data space
154c0 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20   */.  int nHdr; 
154d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
154e0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
154f0 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
15500 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20  */.  i64 nByte; 
15510 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
15520 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72  ata space requir
15530 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f  ed for this reco
15540 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e 5a 65 72  rd */.  i64 nZer
15550 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  o;             /
15560 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
15570 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
15580 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
15590 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74  */.  int nVarint
155a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
155b0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
155c0 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20  n a varint */.  
155d0 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b  u32 serial_type;
155e0 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66         /* Type f
155f0 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ield */.  Mem *p
15600 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20  Data0;          
15610 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20   /* First field 
15620 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69  to be combined i
15630 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a  nto the record *
15640 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20  /.  Mem *pLast; 
15650 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
15660 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  st field of the 
15670 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
15680 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
15690 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
156a0 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
156b0 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cord */.  char *
156c0 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20  zAffinity;      
156d0 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
156e0 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the 
156f0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
15700 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
15710 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61     /* File forma
15720 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63  t to use for enc
15730 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  oding */.  int i
15740 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15750 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20    /* Space used 
15760 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20  in zNewRecord[] 
15770 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20  header */.  int 
15780 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  j;              
15790 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
157a0 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
157b0 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 69 6e   content */.  in
157c0 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
157d0 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
157e0 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20  f a field */..  
157f0 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20  /* Assuming the 
15800 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20  record contains 
15810 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65  N fields, the re
15820 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b  cord format look
15830 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73  s.  ** like this
15840 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d  :.  **.  ** ----
15850 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15860 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15870 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15880 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15890 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d  ----.  ** | hdr-
158a0 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20  size | type 0 | 
158b0 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74  type 1 | ... | t
158c0 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20  ype N-1 | data0 
158d0 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31  | ... | data N-1
158e0 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d   | .  ** -------
158f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15900 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15910 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15920 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15930 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61  -.  **.  ** Data
15940 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f  (0) is taken fro
15950 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  m register P1.  
15960 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72  Data(1) comes fr
15970 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31  om register P1+1
15980 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 6f 72  .  ** and so for
15990 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61  th..  **.  ** Ea
159a0 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73  ch type field is
159b0 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73   a varint repres
159c0 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61  enting the seria
159d0 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20  l type of the . 
159e0 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e   ** correspondin
159f0 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28  g data element (
15a00 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53  see sqlite3VdbeS
15a10 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68  erialType()). Th
15a20 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20  e.  ** hdr-size 
15a30 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20  field is also a 
15a40 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
15a50 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  the offset from 
15a60 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20  the beginning.  
15a70 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
15a80 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a   to data0..  */.
15a90 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20    nData = 0;    
15aa0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15ab0 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
15ac0 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20  space */.  nHdr 
15ad0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
15ae0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
15af0 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
15b00 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b   */.  nZero = 0;
15b10 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15b20 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
15b30 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
15b40 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e  he record */.  n
15b50 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b  Field = pOp->p1;
15b60 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
15b70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
15b80 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20  rt( nField>0 && 
15b90 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
15ba0 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d  ->p2+nField<=(p-
15bb0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
15bc0 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20  )+1 );.  pData0 
15bd0 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b  = &aMem[nField];
15be0 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d  .  nField = pOp-
15bf0 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26  >p2;.  pLast = &
15c00 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d  pData0[nField-1]
15c10 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ;.  file_format 
15c20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  = p->minWriteFil
15c30 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49  eFormat;..  /* I
15c40 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74 70  dentify the outp
15c50 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 20  ut register */. 
15c60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
15c70 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d  <pOp->p1 || pOp-
15c80 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70  >p3>=pOp->p1+pOp
15c90 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d  ->p2 );.  pOut =
15ca0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
15cb0 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
15cc0 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20  nge(p, pOut);.. 
15cd0 20 2f 2a 20 41 70 70 6c 79 20 74 68 65 20 72 65   /* Apply the re
15ce0 71 75 65 73 74 65 64 20 61 66 66 69 6e 69 74 79  quested affinity
15cf0 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20   to all inputs. 
15d00 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 44   */.  assert( pD
15d10 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  ata0<=pLast );. 
15d20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29   if( zAffinity )
15d30 7b 0a 20 20 20 20 70 52 65 63 20 3d 20 70 44 61  {.    pRec = pDa
15d40 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20  ta0;.    do{.   
15d50 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
15d60 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69  (pRec++, *(zAffi
15d70 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e  nity++), encodin
15d80 67 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  g);.      assert
15d90 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d  ( zAffinity[0]==
15da0 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74  0 || pRec<=pLast
15db0 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28 20   );.    }while( 
15dc0 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a  zAffinity[0] );.
15dd0 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74    }..  /* Loop t
15de0 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65  hrough the eleme
15df0 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61  nts that will ma
15e00 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64  ke up the record
15e10 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20   to figure.  ** 
15e20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61  out how much spa
15e30 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ce is required f
15e40 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  or the new recor
15e50 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d  d..  */.  pRec =
15e60 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20   pLast;.  do{.  
15e70 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
15e80 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20  alid(pRec) );.  
15e90 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20    pRec->uTemp = 
15ea0 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71  serial_type = sq
15eb0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
15ec0 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66  ype(pRec, file_f
15ed0 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e 20  ormat);.    len 
15ee0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
15ef0 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69 61  ialTypeLen(seria
15f00 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28  l_type);.    if(
15f10 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
15f20 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
15f30 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20   if( nData ){.  
15f40 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
15f50 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
15f60 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20  ob(pRec) ) goto 
15f70 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65  no_mem;.      }e
15f80 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65  lse{.        nZe
15f90 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  ro += pRec->u.nZ
15fa0 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  ero;.        len
15fb0 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   -= pRec->u.nZer
15fc0 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  o;.      }.    }
15fd0 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65  .    nData += le
15fe0 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  n;.    testcase(
15ff0 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
16000 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  7 );.    testcas
16010 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  e( serial_type==
16020 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20  128 );.    nHdr 
16030 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d  += serial_type<=
16040 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65  127 ? 1 : sqlite
16050 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
16060 6c 5f 74 79 70 65 29 3b 0a 20 20 7d 77 68 69 6c  l_type);.  }whil
16070 65 28 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44 61  e( (--pRec)>=pDa
16080 74 61 30 20 29 3b 0a 0a 20 20 2f 2a 20 45 56 49  ta0 );..  /* EVI
16090 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36  DENCE-OF: R-2256
160a0 34 2d 31 31 36 34 37 20 54 68 65 20 68 65 61 64  4-11647 The head
160b0 65 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61  er begins with a
160c0 20 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20   single varint. 
160d0 20 2a 2a 20 77 68 69 63 68 20 64 65 74 65 72 6d   ** which determ
160e0 69 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  ines the total n
160f0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
16100 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 54 68  n the header. Th
16110 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61  e varint.  ** va
16120 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20  lue is the size 
16130 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e  of the header in
16140 20 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67   bytes including
16150 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
16160 0a 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f  .  ** itself. */
16170 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
16180 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74  r==126 );.  test
16190 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20  case( nHdr==127 
161a0 29 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31  );.  if( nHdr<=1
161b0 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  26 ){.    /* The
161c0 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a   common case */.
161d0 20 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20      nHdr += 1;. 
161e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52   }else{.    /* R
161f0 61 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65  are case of a re
16200 61 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65  ally large heade
16210 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74  r */.    nVarint
16220 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74   = sqlite3Varint
16230 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e  Len(nHdr);.    n
16240 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a  Hdr += nVarint;.
16250 20 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c      if( nVarint<
16260 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
16270 28 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b  (nHdr) ) nHdr++;
16280 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e  .  }.  nByte = n
16290 48 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28  Hdr+nData;.  if(
162a0 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d   nByte+nZero>db-
162b0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
162c0 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
162d0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
162e0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65  ;.  }..  /* Make
162f0 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74   sure the output
16300 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20   register has a 
16310 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f  buffer large eno
16320 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20  ugh to store .  
16330 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  ** the new recor
16340 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65  d. The output re
16350 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29  gister (pOp->p3)
16360 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
16370 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f  to.  ** be one o
16380 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  f the input regi
16390 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74  sters (because t
163a0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
163b0 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
163c0 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
163d0 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63  Resize() could c
163e0 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
163f0 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
16400 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ed)..  */.  if( 
16410 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
16420 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75  earAndResize(pOu
16430 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29  t, (int)nByte) )
16440 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
16450 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63  m;.  }.  zNewRec
16460 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74  ord = (u8 *)pOut
16470 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65  ->z;..  /* Write
16480 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
16490 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32   i = putVarint32
164a0 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64  (zNewRecord, nHd
164b0 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a  r);.  j = nHdr;.
164c0 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30    assert( pData0
164d0 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65  <=pLast );.  pRe
164e0 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f  c = pData0;.  do
164f0 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
16500 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b  e = pRec->uTemp;
16510 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  .    /* EVIDENCE
16520 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37 33  -OF: R-06529-473
16530 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  62 Following the
16540 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65   size varint are
16550 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20   one or more.   
16560 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 76   ** additional v
16570 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20  arints, one per 
16580 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69  column. */.    i
16590 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28   += putVarint32(
165a0 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20  &zNewRecord[i], 
165b0 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20  serial_type);   
165c0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69           /* seri
165d0 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f  al type */.    /
165e0 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
165f0 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54 68 65  -64536-51728 The
16600 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68   values for each
16610 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72   column in the r
16620 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d  ecord.    ** imm
16630 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20  ediately follow 
16640 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
16650 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56     j += sqlite3V
16660 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e  dbeSerialPut(&zN
16670 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65  ewRecord[j], pRe
16680 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  c, serial_type);
16690 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20   /* content */. 
166a0 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63   }while( (++pRec
166b0 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73  )<=pLast );.  as
166c0 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b  sert( i==nHdr );
166d0 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42  .  assert( j==nB
166e0 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  yte );..  assert
166f0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
16700 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
16710 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
16720 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
16730 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
16740 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
16750 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b  ;.  if( nZero ){
16760 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65  .    pOut->u.nZe
16770 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20  ro = nZero;.    
16780 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
16790 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70  EM_Zero;.  }.  p
167a0 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
167b0 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63  E_UTF8;  /* In c
167c0 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20  ase the blob is 
167d0 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74  ever converted t
167e0 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49  o text */.  REGI
167f0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
16800 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44  p3, pOut);.  UPD
16810 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
16820 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
16830 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
16840 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
16850 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
16860 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a  P2]=count().**.*
16870 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
16880 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
16890 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
168a0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
168b0 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
168c0 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
168d0 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
168e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
168f0 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
16900 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
16910 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
16920 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79   */.  i64 nEntry
16930 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
16940 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20  rsr;..  pCrsr = 
16950 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
16960 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  ]->pCursor;.  as
16970 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
16980 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a   nEntry = 0;  /*
16990 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
169a0 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
169b0 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
169c0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
169d0 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c  treeCount(pCrsr,
169e0 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75   &nEntry);.  pOu
169f0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
16a00 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
16a10 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79  ut->u.i = nEntry
16a20 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
16a30 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
16a40 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a  Savepoint P1 * *
16a50 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e   P4 *.**.** Open
16a60 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c  , release or rol
16a70 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f  lback the savepo
16a80 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72  int named by par
16a90 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e  ameter P4, depen
16aa0 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76  ding.** on the v
16ab0 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f  alue of P1. To o
16ac0 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f  pen a new savepo
16ad0 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72  int, P1==0. To r
16ae0 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
16af0 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73  an.** existing s
16b00 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c  avepoint, P1==1,
16b10 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20   or to rollback 
16b20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  an existing save
16b30 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a  point P1==2..*/.
16b40 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e  case OP_Savepoin
16b50 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20  t: {.  int p1;  
16b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b70 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
16b80 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f  of P1 operand */
16b90 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
16ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bb0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61     /* Name of sa
16bc0 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74  vepoint */.  int
16bd0 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f   nName;.  Savepo
16be0 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76  int *pNew;.  Sav
16bf0 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
16c00 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  nt;.  Savepoint 
16c10 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61  *pTmp;.  int iSa
16c20 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69  vepoint;.  int i
16c30 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  i;..  p1 = pOp->
16c40 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f  p1;.  zName = pO
16c50 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41  p->p4.z;..  /* A
16c60 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
16c70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76  1 parameter is v
16c80 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20  alid. Also that 
16c90 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  if there is no o
16ca0 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  pen.  ** transac
16cb0 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65  tion, then there
16cc0 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73   cannot be any s
16cd0 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f  avepoints. .  */
16ce0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
16cf0 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20  Savepoint==0 || 
16d00 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
16d10 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
16d20 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
16d30 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  IN||p1==SAVEPOIN
16d40 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53  T_RELEASE||p1==S
16d50 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
16d60 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  K );.  assert( d
16d70 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c  b->pSavepoint ||
16d80 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
16d90 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29  onSavepoint==0 )
16da0 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63  ;.  assert( chec
16db0 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
16dc0 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  db) );.  assert(
16dd0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
16de0 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45  ..  if( p1==SAVE
16df0 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20  POINT_BEGIN ){. 
16e00 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65     if( db->nVdbe
16e10 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20  Write>0 ){.     
16e20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f   /* A new savepo
16e30 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72  int cannot be cr
16e40 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61  eated if there a
16e50 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20  re active write 
16e60 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d  .      ** statem
16e70 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20  ents (i.e. open 
16e80 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65  read/write incre
16e90 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64  mental blob hand
16ea0 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  les)..      */. 
16eb0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
16ec0 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74  Error(p, "cannot
16ed0 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20   open savepoint 
16ee0 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  - SQL statements
16ef0 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
16f00 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
16f10 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73  E_BUSY;.    }els
16f20 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d  e{.      nName =
16f30 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
16f40 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65  (zName);..#ifnde
16f50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
16f60 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20  RTUALTABLE.     
16f70 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73   /* This call is
16f80 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73   Ok even if this
16f90 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63   savepoint is ac
16fa0 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63  tually a transac
16fb0 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61  tion.      ** sa
16fc0 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65  vepoint (and the
16fd0 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f  refore should no
16fe0 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f  t prompt xSavepo
16ff0 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73  int()) callbacks
17000 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68  ..      ** If th
17010 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74  is is a transact
17020 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65  ion savepoint be
17030 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69  ing opened, it i
17040 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20  s guaranteed.   
17050 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64     ** that the d
17060 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72  b->aVTrans[] arr
17070 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f  ay is empty.  */
17080 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
17090 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
170a0 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d   || db->nVTrans=
170b0 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  =0 );.      rc =
170c0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
170d0 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f  point(db, SAVEPO
170e0 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20  INT_BEGIN,.     
170f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17100 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e             db->n
17110 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53  Statement+db->nS
17120 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
17130 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
17140 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
17150 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65  due_to_error;.#e
17160 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43  ndif..      /* C
17170 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65  reate a new save
17180 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e  point structure.
17190 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d   */.      pNew =
171a0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
171b0 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53  Raw(db, sizeof(S
171c0 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b  avepoint)+nName+
171d0 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e  1);.      if( pN
171e0 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e  ew ){.        pN
171f0 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61  ew->zName = (cha
17200 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20  r *)&pNew[1];.  
17210 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65        memcpy(pNe
17220 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c  w->zName, zName,
17230 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a   nName+1);.    .
17240 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
17250 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74  ere is no open t
17260 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
17270 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20   mark this as a 
17280 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20  special.        
17290 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20  ** "transaction 
172a0 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20  savepoint". */. 
172b0 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61         if( db->a
172c0 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
172d0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
172e0 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
172f0 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
17300 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
17310 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
17320 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62  se{.          db
17330 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a  ->nSavepoint++;.
17340 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a 20          }.    . 
17350 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74         /* Link t
17360 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74  he new savepoint
17370 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
17380 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74  se handle's list
17390 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65  . */.        pNe
173a0 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70  w->pNext = db->p
173b0 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
173c0 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
173d0 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20  t = pNew;.      
173e0 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65    pNew->nDeferre
173f0 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  dCons = db->nDef
17400 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
17410 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72     pNew->nDeferr
17420 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e  edImmCons = db->
17430 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
17440 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
17450 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61    }else{.    iSa
17460 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20  vepoint = 0;..  
17470 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61    /* Find the na
17480 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49  med savepoint. I
17490 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75  f there is no su
174a0 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68  ch savepoint, th
174b0 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20  en an.    ** an 
174c0 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
174d0 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20  d to the user.  
174e0 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20  */.    for(.    
174f0 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    pSavepoint = d
17500 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a  b->pSavepoint; .
17510 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
17520 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 49 43   && sqlite3StrIC
17530 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a  mp(pSavepoint->z
17540 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20  Name, zName);.  
17550 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d      pSavepoint =
17560 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
17570 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  xt.    ){.      
17580 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20  iSavepoint++;.  
17590 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61    }.    if( !pSa
175a0 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20  vepoint ){.     
175b0 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
175c0 72 28 70 2c 20 22 6e 6f 20 73 75 63 68 20 73 61  r(p, "no such sa
175d0 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e  vepoint: %s", zN
175e0 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ame);.      rc =
175f0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
17600 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d     }else if( db-
17610 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26 26  >nVdbeWrite>0 &&
17620 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
17630 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
17640 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  /* It is not pos
17650 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65  sible to release
17660 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65   (commit) a save
17670 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61  point if there a
17680 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74  re .      ** act
17690 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d  ive write statem
176a0 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ents..      */. 
176b0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
176c0 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74  Error(p, "cannot
176d0 20 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69   release savepoi
176e0 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20  nt - ".         
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17700 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
17710 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
17720 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
17730 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73  E_BUSY;.    }els
17740 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74  e{..      /* Det
17750 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f  ermine whether o
17760 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20  r not this is a 
17770 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
17780 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20  point. If so,.  
17790 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20      ** and this 
177a0 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d  is a RELEASE com
177b0 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63  mand, then the c
177c0 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
177d0 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  on .      ** is 
177e0 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20  committed. .    
177f0 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69    */.      int i
17800 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70  sTransaction = p
17810 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
17820 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61  ==0 && db->isTra
17830 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
17840 74 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  t;.      assert(
17850 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74   db->bConcurrent
17860 3d 3d 30 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61  ==0 || db->isTra
17870 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
17880 74 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  t==0 );.      if
17890 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20  ( isTransaction 
178a0 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  && p1==SAVEPOINT
178b0 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
178c0 20 20 20 20 69 66 28 20 28 72 63 20 3d 20 73 71      if( (rc = sq
178d0 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
178e0 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f  (p, 1))!=SQLITE_
178f0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
17900 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
17910 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
17920 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
17930 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  it = 1;.        
17940 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
17950 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
17960 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20  USY ){.         
17970 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70   p->pc = (int)(p
17980 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20  Op - aOp);.     
17990 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
179a0 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  mit = 0;.       
179b0 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
179c0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
179d0 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
179e0 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
179f0 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69   }.        db->i
17a00 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
17a10 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20  point = 0;.     
17a20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20     rc = p->rc;. 
17a30 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
17a40 20 20 20 20 69 6e 74 20 69 73 53 63 68 65 6d 61      int isSchema
17a50 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20  Change;.        
17a60 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  iSavepoint = db-
17a70 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53  >nSavepoint - iS
17a80 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20  avepoint - 1;.  
17a90 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
17aa0 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
17ab0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73   ){.          is
17ac0 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 28  SchemaChange = (
17ad0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
17ae0 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
17af0 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20 20  )!=0;.          
17b00 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
17b10 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
17b20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
17b30 6c 69 74 65 33 42 74 72 65 65 54 72 69 70 41 6c  lite3BtreeTripAl
17b40 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62  lCursors(db->aDb
17b50 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20  [ii].pBt,.      
17b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b80 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
17b90 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20 20 20  LLBACK,.        
17ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
17bc0 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30  sSchemaChange==0
17bd0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
17be0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17bf0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
17c00 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
17c10 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
17c20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
17c30 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20   isSchemaChange 
17c40 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  = 0;.        }. 
17c50 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b         for(ii=0;
17c60 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
17c70 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63  +){.          rc
17c80 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
17c90 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62  avepoint(db->aDb
17ca0 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53  [ii].pBt, p1, iS
17cb0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
17cc0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
17cd0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
17ce0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
17cf0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
17d00 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
17d10 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
17d20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20   isSchemaChange 
17d30 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
17d40 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
17d50 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
17d60 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
17d70 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
17d80 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  asOfConnection(d
17d90 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62  b);.          db
17da0 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66  ->flags = (db->f
17db0 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e  lags | SQLITE_In
17dc0 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20  ternChanges);.  
17dd0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
17de0 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61    .      /* Rega
17df0 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
17e00 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  r this is a RELE
17e10 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c  ASE or ROLLBACK,
17e20 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20   destroy all .  
17e30 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
17e40 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20  s nested inside 
17e50 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  of the savepoint
17e60 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
17e70 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69  on. */.      whi
17e80 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  le( db->pSavepoi
17e90 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29  nt!=pSavepoint )
17ea0 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d  {.        pTmp =
17eb0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
17ec0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
17ed0 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e  vepoint = pTmp->
17ee0 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
17ef0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
17f00 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20   pTmp);.        
17f10 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
17f20 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
17f30 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52   /* If it is a R
17f40 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73  ELEASE, then des
17f50 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69  troy the savepoi
17f60 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
17f70 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74  d on .      ** t
17f80 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52  oo. If it is a R
17f90 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e  OLLBACK TO, then
17fa0 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20   set the number 
17fb0 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20  of deferred .   
17fc0 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74     ** constraint
17fd0 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73   violations pres
17fe0 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
17ff0 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ase to the value
18000 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a   stored.      **
18010 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f   when the savepo
18020 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e  int was created.
18030 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
18040 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
18050 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
18060 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69  assert( pSavepoi
18070 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  nt==db->pSavepoi
18080 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  nt );.        db
18090 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
180a0 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
180b0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
180c0 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76  3DbFree(db, pSav
180d0 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
180e0 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
180f0 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ion ){.         
18100 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
18110 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  -;.        }.   
18120 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
18130 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43    db->nDeferredC
18140 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ons = pSavepoint
18150 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
18160 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65  .        db->nDe
18170 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20  ferredImmCons = 
18180 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
18190 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
181a0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28      }..      if(
181b0 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20   !isTransaction 
181c0 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  || p1==SAVEPOINT
181d0 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20  _ROLLBACK ){.   
181e0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
181f0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
18200 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e  b, p1, iSavepoin
18210 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
18220 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
18230 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18240 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
18250 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72  .    }.  }..  br
18260 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
18270 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31  e: AutoCommit P1
18280 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
18290 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73   Set the databas
182a0 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
182b0 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30  ag to P1 (1 or 0
182c0 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65  ). If P2 is true
182d0 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61  , roll.** back a
182e0 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74  ny currently act
182f0 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61  ive btree transa
18300 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65  ctions. If there
18310 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a   are any active.
18320 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72  ** VMs (apart fr
18330 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68  om this one), th
18340 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61  en a ROLLBACK fa
18350 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66  ils.  A COMMIT f
18360 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65  ails if.** there
18370 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
18380 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76  ing VMs or activ
18390 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73  e VMs that use s
183a0 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a  hared cache..**.
183b0 2a 2a 20 49 66 20 50 33 20 69 73 20 6e 6f 6e 2d  ** If P3 is non-
183c0 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 69 73 20  zero, then this 
183d0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62  instruction is b
183e0 65 69 6e 67 20 65 78 65 63 75 74 65 64 20 61 73  eing executed as
183f0 20 70 61 72 74 20 6f 66 0a 2a 2a 20 61 20 22 42   part of.** a "B
18400 45 47 49 4e 20 43 4f 4e 43 55 52 52 45 4e 54 22  EGIN CONCURRENT"
18410 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20   command..**.** 
18420 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
18430 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20 74   causes the VM t
18440 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  o halt..*/.case 
18450 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b  OP_AutoCommit: {
18460 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41 75  .  int desiredAu
18470 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20  toCommit;.  int 
18480 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74  iRollback;.  int
18490 20 74 75 72 6e 4f 6e 41 43 3b 0a 20 20 69 6e 74   turnOnAC;.  int
184a0 20 62 43 6f 6e 63 75 72 72 65 6e 74 3b 0a 20 20   bConcurrent;.  
184b0 69 6e 74 20 68 72 63 3b 0a 0a 20 20 64 65 73 69  int hrc;..  desi
184c0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  redAutoCommit = 
184d0 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c  pOp->p1;.  iRoll
184e0 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  back = pOp->p2;.
184f0 20 20 62 43 6f 6e 63 75 72 72 65 6e 74 20 3d 20    bConcurrent = 
18500 70 4f 70 2d 3e 70 33 3b 0a 20 20 74 75 72 6e 4f  pOp->p3;.  turnO
18510 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41 75 74  nAC = desiredAut
18520 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e  oCommit && !db->
18530 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73  autoCommit;.  as
18540 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
18550 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65  oCommit==1 || de
18560 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
18570 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
18580 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
18590 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63  t==1 || iRollbac
185a0 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  k==0 );.  assert
185b0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
185c0 6d 69 74 3d 3d 30 20 7c 7c 20 62 43 6f 6e 63 75  mit==0 || bConcu
185d0 72 72 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73  rrent==0 );.  as
185e0 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f  sert( db->autoCo
185f0 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 62  mmit==0 || db->b
18600 43 6f 6e 63 75 72 72 65 6e 74 3d 3d 30 20 29 3b  Concurrent==0 );
18610 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e  .  assert( db->n
18620 56 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20  VdbeActive>0 ); 
18630 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69   /* At least thi
18640 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69  s one VM is acti
18650 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  ve */.  assert( 
18660 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
18670 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20  .  if( turnOnAC 
18680 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 0a 20  && !iRollback . 
18690 20 20 26 26 20 28 64 62 2d 3e 6e 56 64 62 65 57    && (db->nVdbeW
186a0 72 69 74 65 3e 30 20 7c 7c 20 28 64 62 2d 3e 62  rite>0 || (db->b
186b0 43 6f 6e 63 75 72 72 65 6e 74 20 26 26 20 64 62  Concurrent && db
186c0 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 31 29  ->nVdbeActive>1)
186d0 29 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 41 20  ).  ){.    /* A 
186e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
186f0 6f 6e 6c 79 20 62 65 20 63 6f 6d 6d 69 74 74 65  only be committe
18700 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  d if there are n
18710 6f 20 6f 74 68 65 72 20 61 63 74 69 76 65 0a 20  o other active. 
18720 20 20 20 2a 2a 20 77 72 69 74 65 72 20 56 4d 73     ** writer VMs
18730 2e 20 49 66 20 74 68 65 20 74 72 61 6e 73 61 63  . If the transac
18740 74 69 6f 6e 20 69 73 20 43 4f 4e 43 55 52 52 45  tion is CONCURRE
18750 4e 54 2c 20 74 68 65 6e 20 69 74 20 6d 61 79 20  NT, then it may 
18760 6f 6e 6c 79 20 62 65 0a 20 20 20 20 2a 2a 20 63  only be.    ** c
18770 6f 6d 6d 69 74 74 65 64 20 69 66 20 74 68 65 72  ommitted if ther
18780 65 20 61 72 65 20 6e 6f 20 61 63 74 69 76 65 20  e are no active 
18790 56 4d 73 20 61 74 20 61 6c 6c 20 28 72 65 61 64  VMs at all (read
187a0 65 72 73 20 6f 72 20 77 72 69 74 65 72 73 29 2e  ers or writers).
187b0 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49  .    **.    ** I
187c0 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
187d0 6f 6e 20 69 73 20 61 20 43 4f 4d 4d 49 54 20 61  on is a COMMIT a
187e0 6e 64 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  nd the transacti
187f0 6f 6e 20 6d 61 79 20 6e 6f 74 20 62 65 0a 20 20  on may not be.  
18800 20 20 2a 2a 20 63 6f 6d 6d 69 74 74 65 64 20 64    ** committed d
18810 75 65 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  ue to one of the
18820 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 62 6f 76   conditions abov
18830 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  e, return an err
18840 6f 72 0a 20 20 20 20 2a 2a 20 69 6e 64 69 63 61  or.    ** indica
18850 74 69 6e 67 20 74 68 61 74 20 6f 74 68 65 72 20  ting that other 
18860 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74  VMs must complet
18870 65 20 62 65 66 6f 72 65 20 74 68 65 20 43 4f 4d  e before the COM
18880 4d 49 54 20 63 61 6e 20 0a 20 20 20 20 2a 2a 20  MIT can .    ** 
18890 62 65 20 70 72 6f 63 65 73 73 65 64 2e 20 20 2a  be processed.  *
188a0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
188b0 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f  eError(p, "canno
188c0 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63  t commit transac
188d0 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20  tion - ".       
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188f0 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
18900 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
18910 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18920 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66  BUSY;.  }else if
18930 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
18940 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d  mit!=db->autoCom
18950 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69  mit ){.    if( i
18960 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20  Rollback ){.    
18970 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
18980 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29  dAutoCommit==1 )
18990 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  ;.      sqlite3R
189a0 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53  ollbackAll(db, S
189b0 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
189c0 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d  BACK);.      db-
189d0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
189e0 0a 20 20 20 20 20 20 64 62 2d 3e 62 43 6f 6e 63  .      db->bConc
189f0 75 72 72 65 6e 74 20 3d 20 30 3b 0a 20 20 20 20  urrent = 0;.    
18a00 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20  }else if( (rc = 
18a10 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
18a20 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
18a30 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
18a40 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
18a50 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
18a60 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
18a70 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74  = (u8)desiredAut
18a80 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20  oCommit;.    }. 
18a90 20 20 20 68 72 63 20 3d 20 73 71 6c 69 74 65 33     hrc = sqlite3
18aa0 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 20  VdbeHalt(p);.   
18ab0 20 69 66 28 20 28 68 72 63 20 26 20 30 78 46 46   if( (hrc & 0xFF
18ac0 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
18ad0 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
18ae0 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
18af0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
18b00 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d  Commit = (u8)(1-
18b10 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
18b20 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20  t);.      p->rc 
18b30 3d 20 68 72 63 3b 0a 20 20 20 20 20 20 72 63 20  = hrc;.      rc 
18b40 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
18b50 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
18b60 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20  eturn;.    }.   
18b70 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74   db->bConcurrent
18b80 20 3d 20 28 75 38 29 62 43 6f 6e 63 75 72 72 65   = (u8)bConcurre
18b90 6e 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  nt;.    assert( 
18ba0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d  db->nStatement==
18bb0 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
18bc0 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
18bd0 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  db);.    if( p->
18be0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
18bf0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
18c00 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c  TE_DONE;.    }el
18c10 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  se{.      rc = S
18c20 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
18c30 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65   }.    goto vdbe
18c40 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65  _return;.  }else
18c50 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
18c60 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20  eError(p,.      
18c70 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43    (!desiredAutoC
18c80 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73  ommit)?"cannot s
18c90 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
18ca0 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  on within a tran
18cb0 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20  saction":(.     
18cc0 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22     (iRollback)?"
18cd0 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
18ce0 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
18cf0 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20   is active":.   
18d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d10 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d  "cannot commit -
18d20 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
18d30 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20  is active"));.  
18d40 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d         .    rc =
18d50 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
18d60 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
18d70 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61  * Opcode: Transa
18d80 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
18d90 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e  4 P5.**.** Begin
18da0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
18db0 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 69 66  n database P1 if
18dc0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
18dd0 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a  s not already.**
18de0 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50   active..** If P
18df0 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  2 is non-zero, t
18e00 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e  hen a write-tran
18e10 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
18e20 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20  ed, or if a .** 
18e30 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e  read-transaction
18e40 20 69 73 20 61 6c 72 65 61 64 79 20 61 63 74 69   is already acti
18e50 76 65 2c 20 69 74 20 69 73 20 75 70 67 72 61 64  ve, it is upgrad
18e60 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72  ed to a write-tr
18e70 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66  ansaction..** If
18e80 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P2 is zero, the
18e90 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63  n a read-transac
18ea0 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
18eb0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
18ec0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
18ed0 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77  tabase file on w
18ee0 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63  hich the transac
18ef0 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74  tion is.** start
18f00 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20  ed.  Index 0 is 
18f10 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
18f20 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78  e file and index
18f30 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c   1 is the.** fil
18f40 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
18f50 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e  rary tables.  In
18f60 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f  dices of 2 or mo
18f70 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a  re are used for.
18f80 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ** attached data
18f90 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  bases..**.** If 
18fa0 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
18fb0 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61  ion is started a
18fc0 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73  nd the Vdbe.uses
18fd0 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67  StmtJournal flag
18fe0 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69   is.** true (thi
18ff0 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66  s flag is set if
19000 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f   the Vdbe may mo
19010 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f  dify more than o
19020 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a  ne row and may.*
19030 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  * throw an ABORT
19040 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73   exception), a s
19050 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
19060 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65  tion may also be
19070 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65   opened..** More
19080 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61   specifically, a
19090 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
190a0 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64  action is opened
190b0 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73   iff the databas
190c0 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
190d0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74  is currently not
190e0 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d   in autocommit m
190f0 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65  ode, or if there
19100 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63   are other.** ac
19110 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  tive statements.
19120 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   A statement tra
19130 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20  nsaction allows 
19140 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65  the changes made
19150 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45   by this.** VDBE
19160 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
19170 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
19180 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  r without having
19190 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68   to roll back th
191a0 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e  e.** entire tran
191b0 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65  saction. If no e
191c0 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
191d0 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65  red, the stateme
191e0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
191f0 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  * will automatic
19200 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e  ally commit when
19210 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e   the VDBE halts.
19220 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
19230 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
19240 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65   also checks the
19250 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61   schema cookie a
19260 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64  gainst P3.** and
19270 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65   the schema gene
19280 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61  ration counter a
19290 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68  gainst P4..** Th
192a0 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  e cookie changes
192b0 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65   its value whene
192c0 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
192d0 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e   schema changes.
192e0 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
192f0 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  on is used to de
19300 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74  tect when that t
19310 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68  he cookie has ch
19320 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61  anged.** and tha
19330 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  t the current pr
19340 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72  ocess needs to r
19350 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61  eread the schema
19360 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
19370 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33  .** cookie in P3
19380 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
19390 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
193a0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
193b0 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20  header or.** if 
193c0 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72  the schema gener
193d0 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e  ation counter in
193e0 20 50 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d   P4 differs from
193f0 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20   the current.** 
19400 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
19410 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49  er, then an SQLI
19420 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20  TE_SCHEMA error 
19430 69 73 20 72 61 69 73 65 64 20 61 6e 64 20 65 78  is raised and ex
19440 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73  ecution.** halts
19450 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73  .  The sqlite3_s
19460 74 65 70 28 29 20 77 72 61 70 70 65 72 20 66 75  tep() wrapper fu
19470 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65  nction might the
19480 6e 20 72 65 70 72 65 70 61 72 65 20 74 68 65 0a  n reprepare the.
19490 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  ** statement and
194a0 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74   rerun it from t
194b0 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f  he beginning..*/
194c0 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63  .case OP_Transac
194d0 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20  tion: {.  Btree 
194e0 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74  *pBt;.  int iMet
194f0 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a  a;.  int iGen;..
19500 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
19510 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
19520 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
19530 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30  =0 || pOp->p2==0
19540 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
19550 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
19560 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
19570 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
19580 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
19590 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
195a0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28  if( pOp->p2 && (
195b0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
195c0 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30  TE_QueryOnly)!=0
195d0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
195e0 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20  ITE_READONLY;.  
195f0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
19600 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
19610 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
19620 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
19630 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
19640 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
19650 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
19660 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65  pOp->p2);.    te
19670 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49  stcase( rc==SQLI
19680 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54  TE_BUSY_SNAPSHOT
19690 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
196a0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
196b0 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a 20 20  Y_RECOVERY );.  
196c0 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d    if( (rc&0xff)=
196d0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
196e0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
196f0 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
19700 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
19710 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
19720 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
19730 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
19740 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
19750 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
19760 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20  _error;.    }.. 
19770 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26     if( pOp->p2 &
19780 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  & p->usesStmtJou
19790 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64  rnal .     && (d
197a0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
197b0 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61   || db->nVdbeRea
197c0 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20  d>1) .    ){.   
197d0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
197e0 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
197f0 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69  (pBt) );.      i
19800 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  f( p->iStatement
19810 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ==0 ){.        a
19820 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
19830 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e  ement>=0 && db->
19840 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b  nSavepoint>=0 );
19850 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74  .        db->nSt
19860 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20  atement++; .    
19870 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e      p->iStatemen
19880 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
19890 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d  nt + db->nStatem
198a0 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ent;.      }..  
198b0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
198c0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
198d0 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  , SAVEPOINT_BEGI
198e0 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  N, p->iStatement
198f0 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  -1);.      if( r
19900 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
19910 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
19920 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74  ite3BtreeBeginSt
19930 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74  mt(pBt, p->iStat
19940 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a  ement);.      }.
19950 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20  .      /* Store 
19960 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
19970 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
19980 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72  e handles deferr
19990 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20  ed constraint.  
199a0 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20      ** counter. 
199b0 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
199c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65   transaction nee
199d0 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ds to be rolled 
199e0 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74  back,.      ** t
199f0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  he value of this
19a00 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74   counter needs t
19a10 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f  o be restored to
19a20 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e  o.  */.      p->
19a30 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64  nStmtDefCons = d
19a40 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
19a50 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74  ;.      p->nStmt
19a60 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d  DefImmCons = db-
19a70 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
19a80 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  s;.    }..    /*
19a90 20 47 61 74 68 65 72 20 74 68 65 20 73 63 68 65   Gather the sche
19aa0 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
19ab0 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 3a 0a  r for checking:.
19ac0 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54      ** IMPLEMENT
19ad0 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 33 32 31 39  ATION-OF: R-3219
19ae0 35 2d 31 39 34 36 35 20 54 68 65 20 73 63 68 65  5-19465 The sche
19af0 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73  ma version is us
19b00 65 64 20 62 79 20 53 51 4c 69 74 65 0a 20 20 20  ed by SQLite.   
19b10 20 2a 2a 20 65 61 63 68 20 74 69 6d 65 20 61 20   ** each time a 
19b20 71 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65  query is execute
19b30 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74  d to ensure that
19b40 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61   the internal ca
19b50 63 68 65 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  che of the.    *
19b60 2a 20 73 63 68 65 6d 61 20 75 73 65 64 20 77 68  * schema used wh
19b70 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65  en compiling the
19b80 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74 63 68   SQL query match
19b90 65 73 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66  es the schema of
19ba0 20 74 68 65 0a 20 20 20 20 2a 2a 20 64 61 74 61   the.    ** data
19bb0 62 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69  base against whi
19bc0 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  ch the compiled 
19bd0 71 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c  query is actuall
19be0 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20 20 20  y executed..    
19bf0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  */.    sqlite3Bt
19c00 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
19c10 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
19c20 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d  SION, (u32 *)&iM
19c30 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d  eta);.    iGen =
19c40 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
19c50 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65  ].pSchema->iGene
19c60 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b  ration;.  }else{
19c70 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74  .    iGen = iMet
19c80 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73  a = 0;.  }.  ass
19c90 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
19ca0 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  || pOp->p4type==
19cb0 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66  P4_INT32 );.  if
19cc0 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d  ( pOp->p5 && (iM
19cd0 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20  eta!=pOp->p3 || 
19ce0 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29  iGen!=pOp->p4.i)
19cf0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
19d00 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
19d10 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
19d20 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44  rrMsg = sqlite3D
19d30 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74  bStrDup(db, "dat
19d40 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
19d50 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20   changed");.    
19d60 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  /* If the schema
19d70 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65  -cookie from the
19d80 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
19d90 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69  atches the cooki
19da0 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64  e .    ** stored
19db0 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d   with the in-mem
19dc0 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69  ory representati
19dd0 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  on of the schema
19de0 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20  , do.    ** not 
19df0 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d  reload the schem
19e00 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  a from the datab
19e10 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a  ase file..    **
19e20 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75  .    ** If virtu
19e30 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e  al-tables are in
19e40 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f   use, this is no
19e50 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69  t just an optimi
19e60 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f  zation..    ** O
19e70 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73  ften, v-tables s
19e80 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20  tore their data 
19e90 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20  in other SQLite 
19ea0 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20  tables, which.  
19eb0 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64    ** are queried
19ec0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65   from within xNe
19ed0 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76  xt() and other v
19ee0 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75  -table methods u
19ef0 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70  sing.    ** prep
19f00 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66  ared queries. If
19f10 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73   such a query is
19f20 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65   out-of-date, we
19f30 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a   do not want to.
19f40 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74      ** discard t
19f50 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
19f60 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20  ma, as the user 
19f70 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  code implementin
19f80 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74  g the.    ** v-t
19f90 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20  able would have 
19fa0 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20  to be ready for 
19fb0 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
19fc0 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c   structure itsel
19fd0 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69  f.    ** to be i
19fe0 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65  nvalidated whene
19ff0 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ver sqlite3_step
1a000 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f  () is called fro
1a010 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a  m within .    **
1a020 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f   a v-table metho
1a030 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d..    */.    if
1a040 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  ( db->aDb[pOp->p
1a050 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  1].pSchema->sche
1a060 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61  ma_cookie!=iMeta
1a070 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1a080 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
1a090 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
1a0a0 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72    }.    p->expir
1a0b0 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  ed = 1;.    rc =
1a0c0 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a   SQLITE_SCHEMA;.
1a0d0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1a0e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43  /* Opcode: ReadC
1a0f0 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
1a100 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f   *.**.** Read co
1a110 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66  okie number P3 f
1a120 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20  rom database P1 
1a130 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74  and write it int
1a140 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
1a150 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73  * P3==1 is the s
1a160 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
1a170 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P3==2 is the dat
1a180 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
1a190 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P3==3 is the re
1a1a0 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
1a1b0 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20  cache size, and 
1a1c0 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
1a1d0 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20   is.** the main 
1a1e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
1a1f0 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64  d P1==1 is the d
1a200 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
1a210 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65  d to store.** te
1a220 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
1a230 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74  **.** There must
1a240 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20   be a read-lock 
1a250 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
1a260 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61  (either a transa
1a270 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65  ction.** must be
1a280 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72   started or ther
1a290 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65  e must be an ope
1a2a0 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65  n cursor) before
1a2b0 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68  .** executing th
1a2c0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
1a2d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43  */.case OP_ReadC
1a2e0 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20  ookie: {        
1a2f0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
1a300 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  /.  int iMeta;. 
1a310 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
1a320 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65  iCookie;..  asse
1a330 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1a340 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d   );.  iDb = pOp-
1a350 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d  >p1;.  iCookie =
1a360 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
1a370 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49  rt( pOp->p3<SQLI
1a380 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
1a390 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  );.  assert( iDb
1a3a0 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
1a3b0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
1a3c0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
1a3d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1a3e0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1a3f0 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
1a400 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
1a410 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
1a420 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b  [iDb].pBt, iCook
1a430 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ie, (u32 *)&iMet
1a440 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  a);.  pOut = out
1a450 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
1a460 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
1a470 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61   = iMeta;.  brea
1a480 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1a490 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
1a4a0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
1a4b0 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ite the content 
1a4c0 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28  of register P3 (
1a4d0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
1a4e0 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e  n integer).** in
1a4f0 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  to cookie number
1a500 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20   P2 of database 
1a510 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68  P1.  P2==1 is th
1a520 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
1a530 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20  .  .** P2==2 is 
1a540 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
1a550 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68  mat. P2==3 is th
1a560 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
1a570 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
1a580 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
1a590 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
1a5a0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1a5b0 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
1a5c0 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
1a5d0 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
1a5e0 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
1a5f0 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
1a600 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
1a610 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
1a620 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
1a630 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
1a640 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20  OP_SetCookie: { 
1a650 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
1a660 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
1a670 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
1a680 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
1a690 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1a6a0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1a6b0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
1a6c0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1a6d0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1a6e0 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
1a6f0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
1a700 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
1a710 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
1a720 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1a730 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
1a740 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1a750 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1a760 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
1a770 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
1a780 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c  [pOp->p3];.  sql
1a790 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
1a7a0 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 23 69 66  erify(pIn3);.#if
1a7b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1a7c0 5f 43 4f 4e 43 55 52 52 45 4e 54 0a 20 20 69 66  _CONCURRENT.  if
1a7d0 28 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e  ( db->bConcurren
1a7e0 74 20 0a 20 20 20 26 26 20 28 70 4f 70 2d 3e 70  t .   && (pOp->p
1a7f0 32 3d 3d 42 54 52 45 45 5f 55 53 45 52 5f 56 45  2==BTREE_USER_VE
1a800 52 53 49 4f 4e 20 7c 7c 20 70 4f 70 2d 3e 70 32  RSION || pOp->p2
1a810 3d 3d 42 54 52 45 45 5f 41 50 50 4c 49 43 41 54  ==BTREE_APPLICAT
1a820 49 4f 4e 5f 49 44 29 0a 20 20 29 7b 0a 20 20 20  ION_ID).  ){.   
1a830 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
1a840 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  OR;.    sqlite3V
1a850 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
1a860 6e 6f 74 20 6d 6f 64 69 66 79 20 25 73 20 77 69  not modify %s wi
1a870 74 68 69 6e 20 43 4f 4e 43 55 52 52 45 4e 54 20  thin CONCURRENT 
1a880 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20  transaction",.  
1a890 20 20 20 20 20 20 70 4f 70 2d 3e 70 32 3d 3d 42        pOp->p2==B
1a8a0 54 52 45 45 5f 55 53 45 52 5f 56 45 52 53 49 4f  TREE_USER_VERSIO
1a8b0 4e 20 3f 20 22 75 73 65 72 5f 76 65 72 73 69 6f  N ? "user_versio
1a8c0 6e 22 20 3a 20 22 61 70 70 6c 69 63 61 74 69 6f  n" : "applicatio
1a8d0 6e 5f 69 64 22 0a 20 20 20 20 29 3b 0a 20 20 20  n_id".    );.   
1a8e0 20 62 72 65 61 6b 3b 20 0a 20 20 7d 0a 23 65 6e   break; .  }.#en
1a8f0 64 69 66 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74  dif.  /* See not
1a900 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68  e about index sh
1a910 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61  ifting on OP_Rea
1a920 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20  dCookie */.  rc 
1a930 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70  = sqlite3BtreeUp
1a940 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42  dateMeta(pDb->pB
1a950 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74  t, pOp->p2, (int
1a960 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69  )pIn3->u.i);.  i
1a970 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
1a980 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
1a990 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20   ){.    /* When 
1a9a0 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
1a9b0 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72  e changes, recor
1a9c0 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65  d the new cookie
1a9d0 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20   internally */. 
1a9e0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 62     assert( db->b
1a9f0 43 6f 6e 63 75 72 72 65 6e 74 3d 3d 30 20 29 3b  Concurrent==0 );
1aa00 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
1aa10 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
1aa20 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e   = (int)pIn3->u.
1aa30 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73  i;.    db->flags
1aa40 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72   |= SQLITE_Inter
1aa50 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73  nChanges;.  }els
1aa60 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42  e if( pOp->p2==B
1aa70 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  TREE_FILE_FORMAT
1aa80 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72   ){.    /* Recor
1aa90 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65  d changes in the
1aaa0 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a   file format */.
1aab0 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
1aac0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20  ->file_format = 
1aad0 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  (u8)pIn3->u.i;. 
1aae0 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31   }.  if( pOp->p1
1aaf0 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e  ==1 ){.    /* In
1ab00 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65  validate all pre
1ab10 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
1ab20 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 54 45   whenever the TE
1ab30 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  MP database.    
1ab40 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68 61  ** schema is cha
1ab50 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31  nged.  Ticket #1
1ab60 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  644 */.    sqlit
1ab70 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
1ab80 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
1ab90 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
1aba0 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   0;.  }.  break;
1abb0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1abc0 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33  penRead P1 P2 P3
1abd0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1abe0 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
1abf0 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P3.**.** Open a 
1ac00 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72  read-only cursor
1ac10 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
1ac20 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f  e table whose ro
1ac30 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32  ot page is.** P2
1ac40 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66   in a database f
1ac50 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61  ile.  The databa
1ac60 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72  se file is deter
1ac70 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a  mined by P3. .**
1ac80 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65   P3==0 means the
1ac90 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20   main database, 
1aca0 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20  P3==1 means the 
1acb0 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f  database used fo
1acc0 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  r .** temporary 
1acd0 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31  tables, and P3>1
1ace0 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20   means used the 
1acf0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74  corresponding at
1ad00 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61  tached.** databa
1ad10 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65  se.  Give the ne
1ad20 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e  w cursor an iden
1ad30 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54  tifier of P1.  T
1ad40 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20  he P1.** values 
1ad50 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74  need not be cont
1ad60 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50  iguous but all P
1ad70 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20  1 values should 
1ad80 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72  be small integer
1ad90 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65  s..** It is an e
1ada0 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62  rror for P1 to b
1adb0 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a  e negative..**.*
1adc0 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20  * If P5!=0 then 
1add0 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
1ade0 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61  of register P2 a
1adf0 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c  s the root page,
1ae00 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75   not.** the valu
1ae10 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a  e of P2 itself..
1ae20 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c  **.** There will
1ae30 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20   be a read lock 
1ae40 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
1ae50 77 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69  whenever there i
1ae60 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72  s an.** open cur
1ae70 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74  sor.  If the dat
1ae80 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b  abase was unlock
1ae90 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73  ed prior to this
1aea0 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
1aeb0 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b  then a read lock
1aec0 20 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20   is acquired as 
1aed0 70 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73  part of this ins
1aee0 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61  truction.  A rea
1aef0 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73  d.** lock allows
1af00 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73   other processes
1af10 20 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74   to read the dat
1af20 61 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62  abase but prohib
1af30 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72  its.** any other
1af40 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f   process from mo
1af50 64 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61  difying the data
1af60 62 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20  base.  The read 
1af70 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61  lock is.** relea
1af80 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72  sed when all cur
1af90 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e  sors are closed.
1afa0 20 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75    If this instru
1afb0 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a  ction attempts.*
1afc0 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20  * to get a read 
1afd0 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20  lock but fails, 
1afe0 74 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69  the script termi
1aff0 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a  nates with an.**
1b000 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72   SQLITE_BUSY err
1b010 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54  or code..**.** T
1b020 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
1b030 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
1b040 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
1b050 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
1b060 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
1b070 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
1b080 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
1b090 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
1b0a0 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
1b0b0 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
1b0c0 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
1b0d0 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1b0e0 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1b0f0 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
1b100 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1b110 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
1b120 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
1b130 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
1b140 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
1b150 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1b160 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a  n the table..**.
1b170 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65  ** See also: Ope
1b180 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64  nWrite, ReopenId
1b190 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  x.*/./* Opcode: 
1b1a0 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20  ReopenIdx P1 P2 
1b1b0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
1b1c0 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
1b1d0 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52  b=P3.**.** The R
1b1e0 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20  eopenIdx opcode 
1b1f0 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
1b200 6b 65 20 52 65 61 64 4f 70 65 6e 20 65 78 63 65  ke ReadOpen exce
1b210 70 74 20 74 68 61 74 20 69 74 20 66 69 72 73 74  pt that it first
1b220 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65  .** checks to se
1b230 65 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  e if the cursor 
1b240 6f 6e 20 50 31 20 69 73 20 61 6c 72 65 61 64 79  on P1 is already
1b250 20 6f 70 65 6e 20 77 69 74 68 20 61 20 72 6f 6f   open with a roo
1b260 74 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72  t page.** number
1b270 20 6f 66 20 50 32 20 61 6e 64 20 69 66 20 69 74   of P2 and if it
1b280 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20   is this opcode 
1b290 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e  becomes a no-op.
1b2a0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1b2b0 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73  ,.** if the curs
1b2c0 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70  or is already op
1b2d0 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65  en, do not reope
1b2e0 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n it..**.** The 
1b2f0 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65  ReopenIdx opcode
1b300 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65   may only be use
1b310 64 20 77 69 74 68 20 50 35 3d 3d 30 20 61 6e 64  d with P5==0 and
1b320 20 77 69 74 68 20 50 34 20 62 65 69 6e 67 0a 2a   with P4 being.*
1b330 2a 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f  * a P4_KEYINFO o
1b340 62 6a 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d  bject.  Furtherm
1b350 6f 72 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75  ore, the P3 valu
1b360 65 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  e must be the sa
1b370 6d 65 20 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f  me as.** every o
1b380 74 68 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f  ther ReopenIdx o
1b390 72 20 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74  r OpenRead for t
1b3a0 68 65 20 73 61 6d 65 20 63 75 72 73 6f 72 20 6e  he same cursor n
1b3b0 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  umber..**.** See
1b3c0 20 74 68 65 20 4f 70 65 6e 52 65 61 64 20 6f 70   the OpenRead op
1b3d0 63 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61 74 69  code documentati
1b3e0 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  on for additiona
1b3f0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
1b400 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
1b410 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20  nWrite P1 P2 P3 
1b420 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
1b430 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
1b440 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
1b450 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
1b460 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65   named P1 on the
1b470 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1b480 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61  whose root.** pa
1b490 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66  ge is P2.  Or if
1b4a0 20 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63   P5!=0 use the c
1b4b0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
1b4c0 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68  er P2 to find th
1b4d0 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a  e.** root page..
1b4e0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
1b4f0 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
1b500 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
1b510 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
1b520 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
1b530 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
1b540 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
1b550 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
1b560 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
1b570 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
1b580 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
1b590 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
1b5a0 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
1b5b0 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
1b5c0 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
1b5d0 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
1b5e0 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
1b5f0 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
1b600 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
1b610 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1b620 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
1b630 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a  le, or to the.**
1b640 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f   largest index o
1b650 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20  f any column of 
1b660 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
1b670 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e  s actually used.
1b680 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
1b690 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75  ruction works ju
1b6a0 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64  st like OpenRead
1b6b0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
1b6c0 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72  opens the cursor
1b6d0 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74  .** in read/writ
1b6e0 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67  e mode.  For a g
1b6f0 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72  iven table, ther
1b700 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20  e can be one or 
1b710 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a  more read-only.*
1b720 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73  * cursors or a s
1b730 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65  ingle read/write
1b740 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20   cursor but not 
1b750 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  both..**.** See 
1b760 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a  also OpenRead..*
1b770 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e  /.case OP_Reopen
1b780 49 64 78 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69  Idx: {.  int nFi
1b790 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  eld;.  KeyInfo *
1b7a0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20  pKeyInfo;.  int 
1b7b0 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  p2;.  int iDb;. 
1b7c0 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42   int wrFlag;.  B
1b7d0 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65  tree *pX;.  Vdbe
1b7e0 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
1b7f0 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65  Db *pDb;..  asse
1b800 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
1b810 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41  | pOp->p5==OPFLA
1b820 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73  G_SEEKEQ );.  as
1b830 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1b840 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b  e==P4_KEYINFO );
1b850 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
1b860 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  sr[pOp->p1];.  i
1b870 66 28 20 70 43 75 72 20 26 26 20 70 43 75 72 2d  f( pCur && pCur-
1b880 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29  >pgnoRoot==(u32)
1b890 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61  pOp->p2 ){.    a
1b8a0 73 73 65 72 74 28 20 70 43 75 72 2d 3e 69 44 62  ssert( pCur->iDb
1b8b0 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20  ==pOp->p3 );    
1b8c0 20 20 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20    /* Guaranteed 
1b8d0 62 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  by the code gene
1b8e0 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 67 6f 74  rator */.    got
1b8f0 6f 20 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65  o open_cursor_se
1b900 74 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f  t_hints;.  }.  /
1b910 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
1b920 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
1b930 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e   open or is open
1b940 20 6f 6e 20 61 20 64 69 66 66 65 72 65 6e 74 0a   on a different.
1b950 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e    ** index, then
1b960 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   fall through in
1b970 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74  to OP_OpenRead t
1b980 6f 20 66 6f 72 63 65 20 61 20 72 65 6f 70 65 6e  o force a reopen
1b990 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e   */.case OP_Open
1b9a0 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70  Read:.case OP_Op
1b9b0 65 6e 57 72 69 74 65 3a 0a 0a 20 20 61 73 73 65  enWrite:..  asse
1b9c0 72 74 28 20 28 70 4f 70 2d 3e 70 35 26 28 4f 50  rt( (pOp->p5&(OP
1b9d0 46 4c 41 47 5f 50 32 49 53 52 45 47 7c 4f 50 46  FLAG_P2ISREG|OPF
1b9e0 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c  LAG_BULKCSR|OPFL
1b9f0 41 47 5f 53 45 45 4b 45 51 29 29 3d 3d 70 4f 70  AG_SEEKEQ))==pOp
1ba00 2d 3e 70 35 20 29 3b 0a 20 20 61 73 73 65 72 74  ->p5 );.  assert
1ba10 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1ba20 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70  P_OpenWrite || p
1ba30 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
1ba40 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45  ->p5==OPFLAG_SEE
1ba50 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28  KEQ );.  assert(
1ba60 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
1ba70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1ba80 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52  opcode==OP_OpenR
1ba90 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ead || pOp->opco
1baa0 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78  de==OP_ReopenIdx
1bab0 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d  .          || p-
1bac0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
1bad0 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65  .  if( p->expire
1bae0 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  d ){.    rc = SQ
1baf0 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
1bb00 41 43 4b 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ACK;.    break;.
1bb10 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20    }..  nField = 
1bb20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  0;.  pKeyInfo = 
1bb30 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  0;.  p2 = pOp->p
1bb40 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  2;.  iDb = pOp->
1bb50 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p3;.  assert( iD
1bb60 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
1bb70 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1bb80 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1bb90 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
1bba0 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
1bbb0 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20  Db[iDb];.  pX = 
1bbc0 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65  pDb->pBt;.  asse
1bbd0 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69  rt( pX!=0 );.  i
1bbe0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
1bbf0 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a  OP_OpenWrite ){.
1bc00 20 20 20 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a      wrFlag = 1;.
1bc10 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
1bc20 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
1bc30 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
1bc40 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70  ;.    if( pDb->p
1bc50 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
1bc60 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74  mat < p->minWrit
1bc70 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20  eFileFormat ){. 
1bc80 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65       p->minWrite
1bc90 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62  FileFormat = pDb
1bca0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1bcb0 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20  format;.    }.  
1bcc0 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61  }else{.    wrFla
1bcd0 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  g = 0;.  }.  if(
1bce0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1bcf0 47 5f 50 32 49 53 52 45 47 20 29 7b 0a 20 20 20  G_P2ISREG ){.   
1bd00 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b   assert( p2>0 );
1bd10 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c  .    assert( p2<
1bd20 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
1bd30 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e  rsor) );.    pIn
1bd40 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  2 = &aMem[p2];. 
1bd50 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
1bd60 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20  Valid(pIn2) );. 
1bd70 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32     assert( (pIn2
1bd80 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1bd90 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  t)!=0 );.    sql
1bda0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
1bdb0 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20  erify(pIn2);.   
1bdc0 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d   p2 = (int)pIn2-
1bdd0 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65  >u.i;.    /* The
1bde0 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73   p2 value always
1bdf0 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72   comes from a pr
1be00 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62  ior OP_CreateTab
1be10 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20  le opcode and.  
1be20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65    ** that opcode
1be30 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74   will always set
1be40 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f   the p2 value to
1be50 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c   2 or more or el
1be60 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20  se fail..    ** 
1be70 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20  If there were a 
1be80 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65  failure, the pre
1be90 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
1bea0 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65  would have halte
1beb0 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20  d.    ** before 
1bec0 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e  reaching this in
1bed0 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  struction. */.  
1bee0 20 20 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32    if( NEVER(p2<2
1bef0 29 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d  ) ) {.      rc =
1bf00 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
1bf10 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BKPT;.      goto
1bf20 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1bf30 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ror;.    }.  }. 
1bf40 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
1bf50 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a  ==P4_KEYINFO ){.
1bf60 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70      pKeyInfo = p
1bf70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
1bf80 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1bf90 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1bfa0 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  db) );.    asser
1bfb0 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  t( pKeyInfo->db=
1bfc0 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c  =db );.    nFiel
1bfd0 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  d = pKeyInfo->nF
1bfe0 69 65 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ield+pKeyInfo->n
1bff0 58 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20  XField;.  }else 
1c000 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
1c010 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20  =P4_INT32 ){.   
1c020 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
1c030 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  4.i;.  }.  asser
1c040 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1c050 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
1c060 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74 63 61  d>=0 );.  testca
1c070 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b  se( nField==0 );
1c080 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74 68 20    /* Table with 
1c090 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1c0a0 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67 20  KEY and nothing 
1c0b0 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72 20 3d  else */.  pCur =
1c0c0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1c0d0 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65  p, pOp->p1, nFie
1c0e0 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20 69  ld, iDb, 1);.  i
1c0f0 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74  f( pCur==0 ) got
1c100 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72  o no_mem;.  pCur
1c110 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1c120 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64   pCur->isOrdered
1c130 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67   = 1;.  pCur->pg
1c140 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 20 20 72  noRoot = p2;.  r
1c150 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1c160 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77  Cursor(pX, p2, w
1c170 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c  rFlag, pKeyInfo,
1c180 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b   pCur->pCursor);
1c190 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66  .  pCur->pKeyInf
1c1a0 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  o = pKeyInfo;.  
1c1b0 2f 2a 20 53 65 74 20 74 68 65 20 56 64 62 65 43  /* Set the VdbeC
1c1c0 75 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61  ursor.isTable va
1c1d0 72 69 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73  riable. Previous
1c1e0 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a   versions of.  *
1c1f0 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f  * SQLite used to
1c200 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f   check if the ro
1c210 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65  ot-page flags we
1c220 72 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20  re sane at this 
1c230 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72  point.  ** and r
1c240 65 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63  eport database c
1c250 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65  orruption if the
1c260 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20  y were not, but 
1c270 74 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20  this check has. 
1c280 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20   ** since moved 
1c290 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c  into the btree l
1c2a0 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43  ayer.  */  .  pC
1c2b0 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f  ur->isTable = pO
1c2c0 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45  p->p4type!=P4_KE
1c2d0 59 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72  YINFO;..open_cur
1c2e0 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3a 0a 20  sor_set_hints:. 
1c2f0 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
1c300 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42  BULKCSR==BTREE_B
1c310 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 61 73 73  ULKLOAD );.  ass
1c320 65 72 74 28 20 4f 50 46 4c 41 47 5f 53 45 45 4b  ert( OPFLAG_SEEK
1c330 45 51 3d 3d 42 54 52 45 45 5f 53 45 45 4b 5f 45  EQ==BTREE_SEEK_E
1c340 51 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74  Q );.  sqlite3Bt
1c350 72 65 65 43 75 72 73 6f 72 48 69 6e 74 73 28 70  reeCursorHints(p
1c360 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c 0a 20 20  Cur->pCursor,.  
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c380 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35          (pOp->p5
1c390 20 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43   & (OPFLAG_BULKC
1c3a0 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  SR|OPFLAG_SEEKEQ
1c3b0 29 29 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  )));.  break;.}.
1c3c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1c3d0 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20  Ephemeral P1 P2 
1c3e0 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  * P4 P5.** Synop
1c3f0 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a  sis: nColumn=P2.
1c400 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1c410 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
1c420 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e  transient table.
1c430 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
1c440 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20  s always opened 
1c450 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20  read/write even 
1c460 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20  if .** the main 
1c470 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64  database is read
1c480 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65  -only.  The ephe
1c490 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69  meral.** table i
1c4a0 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61  s deleted automa
1c4b0 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65  tically when the
1c4c0 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65   cursor is close
1c4d0 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  d..**.** P2 is t
1c4e0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1c4f0 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65  umns in the ephe
1c500 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20  meral table..** 
1c510 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  The cursor point
1c520 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62  s to a BTree tab
1c530 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20  le if P4==0 and 
1c540 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78  to a BTree index
1c550 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74  .** if P4 is not
1c560 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f   0.  If P4 is no
1c570 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74  t NULL, it point
1c580 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73  s to a KeyInfo s
1c590 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74  tructure.** that
1c5a0 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72   defines the for
1c5b0 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74  mat of keys in t
1c5c0 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  he index..**.** 
1c5d0 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
1c5e0 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f   can be a mask o
1c5f0 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c  f the BTREE_* fl
1c600 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69  ags defined.** i
1c610 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73  n btree.h.  Thes
1c620 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20  e flags control 
1c630 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f  aspects of the o
1c640 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  peration of.** t
1c650 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42  he btree.  The B
1c660 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1c670 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47  L and BTREE_SING
1c680 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20  LE flags are.** 
1c690 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61  added automatica
1c6a0 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  lly..*/./* Opcod
1c6b0 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  e: OpenAutoindex
1c6c0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
1c6d0 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1c6e0 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  mn=P2.**.** This
1c6f0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68   opcode works th
1c700 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65  e same as OP_Ope
1c710 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20  nEphemeral.  It 
1c720 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65  has a.** differe
1c730 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69  nt name to disti
1c740 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20  nguish its use. 
1c750 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20   Tables created 
1c760 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73  using.** by this
1c770 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1c780 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74  used for automat
1c790 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1c7a0 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69  ransient.** indi
1c7b0 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f  ces in joins..*/
1c7c0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74  .case OP_OpenAut
1c7d0 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50  oindex: .case OP
1c7e0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20  _OpenEphemeral: 
1c7f0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1c800 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  pCx;.  KeyInfo *
1c810 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61  pKeyInfo;..  sta
1c820 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66  tic const int vf
1c830 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20  sFlags = .      
1c840 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
1c850 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51  WRITE |.      SQ
1c860 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45  LITE_OPEN_CREATE
1c870 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1c880 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c  OPEN_EXCLUSIVE |
1c890 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1c8a0 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45  EN_DELETEONCLOSE
1c8b0 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1c8c0 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44  OPEN_TRANSIENT_D
1c8d0 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  B;.  assert( pOp
1c8e0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1c8f0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
1c900 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1c910 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1c920 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
1c930 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 1);.  if( pCx
1c940 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1c950 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1c960 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73  w = 1;.  pCx->is
1c970 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20  Ephemeral = 1;. 
1c980 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1c990 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c  eeOpen(db->pVfs,
1c9a0 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42   0, db, &pCx->pB
1c9b0 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  t, .            
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45              BTRE
1c9d0 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c  E_OMIT_JOURNAL |
1c9e0 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20   BTREE_SINGLE | 
1c9f0 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67  pOp->p5, vfsFlag
1ca00 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  s);.  if( rc==SQ
1ca10 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
1ca20 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1ca30 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e  BeginTrans(pCx->
1ca40 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69  pBt, 1);.  }.  i
1ca50 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1ca60 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20   ){.    /* If a 
1ca70 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20  transient index 
1ca80 69 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65  is required, cre
1ca90 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e  ate it by callin
1caa0 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  g.    ** sqlite3
1cab0 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
1cac0 28 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45  () with the BTRE
1cad0 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62  E_BLOBKEY flag b
1cae0 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65  efore.    ** ope
1caf0 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72  ning it. If a tr
1cb00 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73  ansient table is
1cb10 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20   required, just 
1cb20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61  use the.    ** a
1cb30 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
1cb40 61 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20  ated table with 
1cb50 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20  root-page 1 (an 
1cb60 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c  BLOB_INTKEY tabl
1cb70 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  e)..    */.    i
1cb80 66 28 20 28 70 4b 65 79 49 6e 66 6f 20 3d 20 70  f( (pKeyInfo = p
1cb90 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29  Op->p4.pKeyInfo)
1cba0 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  !=0 ){.      int
1cbb0 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73   pgno;.      ass
1cbc0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1cbd0 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a  ==P4_KEYINFO );.
1cbe0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1cbf0 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
1cc00 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67  le(pCx->pBt, &pg
1cc10 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  no, BTREE_BLOBKE
1cc20 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20  Y | pOp->p5); . 
1cc30 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
1cc40 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1cc50 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d    assert( pgno==
1cc60 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b  MASTER_ROOT+1 );
1cc70 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1cc80 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64   pKeyInfo->db==d
1cc90 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
1cca0 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  ert( pKeyInfo->e
1ccb0 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1ccc0 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79         pCx->pKey
1ccd0 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
1cce0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1ccf0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1cd00 28 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c  (pCx->pBt, pgno,
1cd10 20 31 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43   1, pKeyInfo, pC
1cd20 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  x->pCursor);.   
1cd30 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e     }.      pCx->
1cd40 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20  isTable = 0;.   
1cd50 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
1cd60 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1cd70 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
1cd80 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20  MASTER_ROOT, 1, 
1cd90 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  0, pCx->pCursor)
1cda0 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  ;.      pCx->isT
1cdb0 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  able = 1;.    }.
1cdc0 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64    }.  pCx->isOrd
1cdd0 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21  ered = (pOp->p5!
1cde0 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44  =BTREE_UNORDERED
1cdf0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1ce00 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
1ce10 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34  Open P1 P2 P3 P4
1ce20 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
1ce30 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20  code works like 
1ce40 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1ce50 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
1ce60 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73  opens.** a trans
1ce70 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20  ient index that 
1ce80 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20  is specifically 
1ce90 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74  designed to sort
1cea0 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73   large.** tables
1ceb0 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e   using an extern
1cec0 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c  al merge-sort al
1ced0 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49  gorithm..**.** I
1cee0 66 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73  f argument P3 is
1cef0 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
1cf00 69 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61  it indicates tha
1cf10 74 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79  t the sorter may
1cf20 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20  .** assume that 
1cf30 61 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f  a stable sort co
1cf40 6e 73 69 64 65 72 69 6e 67 20 74 68 65 20 66 69  nsidering the fi
1cf50 72 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66  rst P3 fields of
1cf60 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20   each.** key is 
1cf70 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72  sufficient to pr
1cf80 6f 64 75 63 65 20 74 68 65 20 72 65 71 75 69 72  oduce the requir
1cf90 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63  ed results..*/.c
1cfa0 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65  ase OP_SorterOpe
1cfb0 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  n: {.  VdbeCurso
1cfc0 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72  r *pCx;..  asser
1cfd0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1cfe0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1cff0 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p2>=0 );.  pCx =
1d000 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1d010 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1d020 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69  >p2, -1, 1);.  i
1d030 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1d040 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1d050 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1d060 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61  p4.pKeyInfo;.  a
1d070 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79  ssert( pCx->pKey
1d080 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1d090 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70    assert( pCx->p
1d0a0 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1d0b0 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20  C(db) );.  rc = 
1d0c0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
1d0d0 72 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70  rInit(db, pOp->p
1d0e0 33 2c 20 70 43 78 29 3b 0a 20 20 62 72 65 61 6b  3, pCx);.  break
1d0f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1d100 53 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20  SequenceTest P1 
1d110 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
1d120 70 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72  psis: if( cursor
1d130 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20  [P1].ctr++ ) pc 
1d140 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  = P2.**.** P1 is
1d150 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
1d160 2e 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63  . If the sequenc
1d170 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  e counter is cur
1d180 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d  rently zero, jum
1d190 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61  p.** to P2. Rega
1d1a0 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
1d1b0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d  r or not the jum
1d1c0 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72  p is taken, incr
1d1d0 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65  ement the.** the
1d1e0 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e   sequence value.
1d1f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
1d200 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64  enceTest: {.  Vd
1d210 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1d220 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1d230 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1d240 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1d250 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1d260 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1d270 70 43 2d 3e 70 53 6f 72 74 65 72 20 29 3b 0a 20  pC->pSorter );. 
1d280 20 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75   if( (pC->seqCou
1d290 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20  nt++)==0 ){.    
1d2a0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
1d2b0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1d2c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1d2d0 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
1d2e0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1d2f0 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72   P3 columns in r
1d300 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  [P2].**.** Open 
1d310 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
1d320 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
1d330 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
1d340 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
1d350 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
1d360 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
1d370 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20  that one row is 
1d380 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d  the content of m
1d390 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65  emory.** registe
1d3a0 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20  r P2.  In other 
1d3b0 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31  words, cursor P1
1d3c0 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61   becomes an alia
1d3d0 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45  s for the .** ME
1d3e0 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63  M_Blob content c
1d3f0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69  ontained in regi
1d400 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41  ster P2..**.** A
1d410 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72   pseudo-table cr
1d420 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70  eated by this op
1d430 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
1d440 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  hold a single.**
1d450 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
1d460 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
1d470 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
1d480 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
1d490 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
1d4a0 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
1d4b0 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1d4c0 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  ode.  The OP_Col
1d4d0 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  umn opcode.** is
1d4e0 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72   the only cursor
1d4f0 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72   opcode that wor
1d500 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f  ks with a pseudo
1d510 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33  -table..**.** P3
1d520 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1d530 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1d540 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c  records that wil
1d550 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a  l be stored by.*
1d560 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
1d570 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  le..*/.case OP_O
1d580 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56  penPseudo: {.  V
1d590 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1d5a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1d5b0 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1d5c0 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b  t( pOp->p3>=0 );
1d5d0 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1d5e0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1d5f0 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c  p1, pOp->p3, -1,
1d600 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d   0);.  if( pCx==
1d610 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1d620 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1d630 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75  = 1;.  pCx->pseu
1d640 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70  doTableReg = pOp
1d650 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54  ->p2;.  pCx->isT
1d660 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73 65  able = 1;.  asse
1d670 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
1d680 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1d690 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50   Opcode: Close P
1d6a0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
1d6b0 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70  Close a cursor p
1d6c0 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
1d6d0 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69   as P1.  If P1 i
1d6e0 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74  s not.** current
1d6f0 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e  ly open, this in
1d700 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e  struction is a n
1d710 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
1d720 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65  _Close: {.  asse
1d730 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1d740 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1d750 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65  rsor );.  sqlite
1d760 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1d770 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  p, p->apCsr[pOp-
1d780 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73  >p1]);.  p->apCs
1d790 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a  r[pOp->p1] = 0;.
1d7a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64    break;.}..#ifd
1d7b0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1d7c0 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53  _COLUMN_USED_MAS
1d7d0 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  K./* Opcode: Col
1d7e0 75 6d 6e 73 55 73 65 64 20 50 31 20 2a 20 2a 20  umnsUsed P1 * * 
1d7f0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4 *.**.** This 
1d800 6f 70 63 6f 64 65 20 28 77 68 69 63 68 20 6f 6e  opcode (which on
1d810 6c 79 20 65 78 69 73 74 73 20 69 66 20 53 51 4c  ly exists if SQL
1d820 69 74 65 20 77 61 73 20 63 6f 6d 70 69 6c 65 64  ite was compiled
1d830 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f   with.** SQLITE_
1d840 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53  ENABLE_COLUMN_US
1d850 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69 66  ED_MASK) identif
1d860 69 65 73 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e  ies which column
1d870 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c  s of the.** tabl
1d880 65 20 6f 72 20 69 6e 64 65 78 20 66 6f 72 20 63  e or index for c
1d890 75 72 73 6f 72 20 50 31 20 61 72 65 20 75 73 65  ursor P1 are use
1d8a0 64 2e 20 20 50 34 20 69 73 20 61 20 36 34 2d 62  d.  P4 is a 64-b
1d8b0 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50  it integer.** (P
1d8c0 34 5f 49 4e 54 36 34 29 20 69 6e 20 77 68 69 63  4_INT64) in whic
1d8d0 68 20 74 68 65 20 66 69 72 73 74 20 36 33 20 62  h the first 63 b
1d8e0 69 74 73 20 61 72 65 20 6f 6e 65 20 66 6f 72 20  its are one for 
1d8f0 65 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66  each of the.** f
1d900 69 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20  irst 63 columns 
1d910 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  of the table or 
1d920 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20 61  index that are a
1d930 63 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20  ctually used.** 
1d940 62 79 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  by the cursor.  
1d950 54 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  The high-order b
1d960 69 74 20 69 73 20 73 65 74 20 69 66 20 61 6e 79  it is set if any
1d970 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a   column after.**
1d980 20 74 68 65 20 36 34 74 68 20 69 73 20 75 73 65   the 64th is use
1d990 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  d..*/.case OP_Co
1d9a0 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56  lumnsUsed: {.  V
1d9b0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1d9c0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1d9d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1d9e0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29  t( pC->pCursor )
1d9f0 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64  ;.  pC->maskUsed
1da00 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70   = *(u64*)pOp->p
1da10 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
1da20 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
1da30 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20  code: SeekGE P1 
1da40 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1da50 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1da60 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1da70 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1da80 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1da90 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1daa0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1dab0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1dac0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1dad0 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66   as the key.  If
1dae0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1daf0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1db00 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1db10 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1db20 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1db30 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1db40 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1db50 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1db60 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1db70 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1db80 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1db90 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1dba0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1dbb0 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1dbc0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1dbd0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1dbe0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1dbf0 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72  ords .** greater
1dc00 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1dc10 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1dc20 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1dc30 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1dc40 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1dc50 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1dc60 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
1dc70 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
1dc80 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
1dc90 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
1dca0 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
1dcb0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1dcc0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
1dcd0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
1dce0 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
1dcf0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1dd00 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1dd10 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47  d, SeekLt, SeekG
1dd20 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  t, SeekLe.*/./* 
1dd30 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50  Opcode: SeekGT P
1dd40 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1dd50 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1dd60 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1dd70 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1dd80 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1dd90 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1dda0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1ddb0 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1ddc0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1ddd0 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
1dde0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1ddf0 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
1de00 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
1de10 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
1de20 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
1de30 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
1de40 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
1de50 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1de60 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
1de70 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
1de80 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
1de90 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
1dea0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1deb0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
1dec0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1ded0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1dee0 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20  records greater 
1def0 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
1df00 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1df10 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1df20 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
1df30 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
1df40 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
1df50 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
1df60 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
1df70 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
1df80 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
1df90 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
1dfa0 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
1dfb0 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
1dfc0 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
1dfd0 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53  ot Prev..**.** S
1dfe0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1dff0 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74  NotFound, SeekLt
1e000 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
1e010 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1e020 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50  eekLT P1 P2 P3 P
1e030 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 * .** Synopsis
1e040 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1e050 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1e060 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1e070 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1e080 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1e090 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1e0a0 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1e0b0 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1e0c0 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
1e0d0 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1e0e0 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1e0f0 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1e100 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1e110 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1e120 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1e130 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1e140 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1e150 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1e160 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
1e170 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1e180 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
1e190 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
1e1a0 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
1e1b0 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1e1c0 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73   no records less
1e1d0 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
1e1e0 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1e1f0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1e200 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
1e210 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
1e220 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
1e230 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
1e240 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
1e250 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
1e260 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
1e270 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
1e280 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
1e290 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
1e2a0 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
1e2b0 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  not Next..**.** 
1e2c0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1e2d0 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47   NotFound, SeekG
1e2e0 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1e2f0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1e300 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20  SeekLE P1 P2 P3 
1e310 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1e320 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1e330 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1e340 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1e350 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1e360 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1e370 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1e380 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1e390 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1e3a0 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
1e3b0 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1e3c0 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1e3d0 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1e3e0 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1e3f0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1e400 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1e410 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1e420 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1e430 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1e440 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
1e450 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1e460 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
1e470 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
1e480 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1e490 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1e4a0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1e4b0 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20  ecords .** less 
1e4c0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1e4d0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1e4e0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1e4f0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1e500 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1e510 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1e520 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
1e530 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20  move in reverse 
1e540 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
1e550 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68  he end toward th
1e560 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e  e beginning.  In
1e570 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1e580 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
1e590 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
1e5a0 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e   Prev, not Next.
1e5b0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1e5c0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1e5d0 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
1e5e0 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65  , SeekLt.*/.case
1e5f0 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20   OP_SeekLT:     
1e600 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1e610 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1e620 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  LE:         /* j
1e630 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1e640 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20   OP_SeekGE:     
1e650 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1e660 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1e670 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  GT: {       /* j
1e680 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
1e690 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b  t res;.  int oc;
1e6a0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1e6b0 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  C;.  UnpackedRec
1e6c0 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69  ord r;.  int nFi
1e6d0 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b  eld;.  i64 iKey;
1e6e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77        /* The row
1e6f0 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65 65  id we are to see
1e700 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72  k to */..  asser
1e710 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1e720 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1e730 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1e740 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20   pOp->p2!=0 );. 
1e750 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1e760 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1e770 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
1e780 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
1e790 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
1e7a0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1e7b0 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b  LE == OP_SeekLT+
1e7c0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  1 );.  assert( O
1e7d0 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53  P_SeekGE == OP_S
1e7e0 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73  eekLT+2 );.  ass
1e7f0 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d  ert( OP_SeekGT =
1e800 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b  = OP_SeekLT+3 );
1e810 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1e820 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73  sOrdered );.  as
1e830 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
1e840 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70  r!=0 );.  oc = p
1e850 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 70 43  Op->opcode;.  pC
1e860 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23  ->nullRow = 0;.#
1e870 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1e880 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
1e890 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23  = pOp->opcode;.#
1e8a0 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 46 6f 72 20  endif..  /* For 
1e8b0 61 20 63 75 72 73 6f 72 20 77 69 74 68 20 74 68  a cursor with th
1e8c0 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20  e BTREE_SEEK_EQ 
1e8d0 68 69 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 4f  hint, only the O
1e8e0 50 5f 53 65 65 6b 47 45 20 61 6e 64 0a 20 20 2a  P_SeekGE and.  *
1e8f0 2a 20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f  * OP_SeekLE opco
1e900 64 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c  des are allowed,
1e910 20 61 6e 64 20 74 68 65 73 65 20 6d 75 73 74 20   and these must 
1e920 62 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  be immediately f
1e930 6f 6c 6c 6f 77 65 64 0a 20 20 2a 2a 20 62 79 20  ollowed.  ** by 
1e940 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f  an OP_IdxGT or O
1e950 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20  P_IdxLT opcode, 
1e960 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 77 69  respectively, wi
1e970 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 2e  th the same key.
1e980 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  .  */.#ifdef SQL
1e990 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
1e9a0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1e9b0 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 70 43  orHasHint(pC->pC
1e9c0 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45  ursor, BTREE_SEE
1e9d0 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20 61 73 73  K_EQ) ){.    ass
1e9e0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1e9f0 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 70  ==OP_SeekGE || p
1ea00 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
1ea10 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 61 73 73  eekLE );.    ass
1ea20 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  ert( pOp[1].opco
1ea30 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20  de==OP_IdxLT || 
1ea40 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  pOp[1].opcode==O
1ea50 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 61  P_IdxGT );.    a
1ea60 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 31  ssert( pOp[1].p1
1ea70 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a 20  ==pOp[0].p1 );. 
1ea80 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
1ea90 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20  ].p2==pOp[0].p2 
1eaa0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1eab0 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d  Op[1].p3==pOp[0]
1eac0 2e 70 33 20 29 3b 0a 20 20 20 20 61 73 73 65 72  .p3 );.    asser
1ead0 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d  t( pOp[1].p4.i==
1eae0 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20  pOp[0].p4.i );. 
1eaf0 20 7d 0a 23 65 6e 64 69 66 0a 20 0a 20 20 69 66   }.#endif. .  if
1eb00 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  ( pC->isTable ){
1eb10 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75  .    /* The inpu
1eb20 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69  t value in P3 mi
1eb30 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79  ght be of any ty
1eb40 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61  pe: integer, rea
1eb50 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a  l, string,.    *
1eb60 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e  * blob, or NULL.
1eb70 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74    But it needs t
1eb80 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20  o be an integer 
1eb90 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f  before we can do
1eba0 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b  .    ** the seek
1ebb0 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e  , so convert it.
1ebc0 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26   */.    pIn3 = &
1ebd0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1ebe0 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1ebf0 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
1ec00 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29  EM_Real|MEM_Str)
1ec10 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  )==MEM_Str ){.  
1ec20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
1ec30 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 30  Affinity(pIn3, 0
1ec40 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b 65  );.    }.    iKe
1ec50 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  y = sqlite3VdbeI
1ec60 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a  ntValue(pIn3);..
1ec70 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
1ec80 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74   value could not
1ec90 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
1eca0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69  to an integer wi
1ecb0 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73  thout.    ** los
1ecc0 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
1ecd0 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70  , then special p
1ece0 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71  rocessing is req
1ecf0 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20  uired... */.    
1ed00 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1ed10 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
1ed20 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  {.      if( (pIn
1ed30 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
1ed40 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
1ed50 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
1ed60 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20  value cannot be 
1ed70 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1ed80 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d  ny kind of a num
1ed90 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20  ber,.        ** 
1eda0 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73  then the seek is
1edb0 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73   not possible, s
1edc0 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  o jump to P2 */.
1edd0 20 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e          VdbeBran
1ede0 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f  chTaken(1,2); go
1edf0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
1ee00 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1ee10 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
1ee20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  If the approxima
1ee30 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72  tion iKey is lar
1ee40 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74  ger than the act
1ee50 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a  ual real search.
1ee60 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73        ** term, s
1ee70 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72  ubstitute >= for
1ee80 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e   > and < for <=.
1ee90 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61   e.g. if the sea
1eea0 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a  rch term.      *
1eeb0 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65  * is 4.9 and the
1eec0 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69   integer approxi
1eed0 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20  mation 5:.      
1eee0 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  **.      **     
1eef0 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20     (x >  4.9)   
1ef00 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29   ->     (x >= 5)
1ef10 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
1ef20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d   (x <= 4.9)    -
1ef30 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20  >     (x <  5). 
1ef40 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
1ef50 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75  ( pIn3->u.r<(dou
1ef60 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20  ble)iKey ){.    
1ef70 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
1ef80 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47  eekGE==(OP_SeekG
1ef90 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  T-1) );.        
1efa0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1efb0 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29  T==(OP_SeekLE-1)
1efc0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1efd0 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26  rt( (OP_SeekLE &
1efe0 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1eff0 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29  ekGT & 0x0001) )
1f000 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
1f010 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  c & 0x0001)==(OP
1f020 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31  _SeekGT & 0x0001
1f030 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20  ) ) oc--;.      
1f040 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  }..      /* If t
1f050 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  he approximation
1f060 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72   iKey is smaller
1f070 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c   than the actual
1f080 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20   real search.   
1f090 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73     ** term, subs
1f0a0 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20  titute <= for < 
1f0b0 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a  and > for >=.  *
1f0c0 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 28  /.      else if(
1f0d0 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62   pIn3->u.r>(doub
1f0e0 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20  le)iKey ){.     
1f0f0 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1f100 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54  ekLE==(OP_SeekLT
1f110 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  +1) );.        a
1f120 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54  ssert( OP_SeekGT
1f130 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20  ==(OP_SeekGE+1) 
1f140 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1f150 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20  t( (OP_SeekLT & 
1f160 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1f170 6b 47 45 20 26 20 30 78 30 30 30 31 29 20 29 3b  kGE & 0x0001) );
1f180 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63  .        if( (oc
1f190 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
1f1a0 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29  SeekLT & 0x0001)
1f1b0 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d   ) oc++;.      }
1f1c0 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d  .    } .    rc =
1f1d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1f1e0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1f1f0 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34  pCursor, 0, (u64
1f200 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b  )iKey, 0, &res);
1f210 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  .    pC->movetoT
1f220 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f  arget = iKey;  /
1f230 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c  * Used by OP_Del
1f240 65 74 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72  ete */.    if( r
1f250 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1f260 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1f270 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1f280 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1f290 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
1f2a0 70 34 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74  p4.i;.    assert
1f2b0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1f2c0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61  4_INT32 );.    a
1f2d0 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
1f2e0 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  );.    r.pKeyInf
1f2f0 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
1f300 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
1f310 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20   (u16)nField;.. 
1f320 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c     /* The next l
1f330 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70  ine of code comp
1f340 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c  utes as follows,
1f350 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20   only faster:.  
1f360 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f    **   if( oc==O
1f370 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d  P_SeekGT || oc==
1f380 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20  OP_SeekLE ){.   
1f390 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c   **     r.defaul
1f3a0 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a  t_rc = -1;.    *
1f3b0 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a  *   }else{.    *
1f3c0 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  *     r.default_
1f3d0 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20  rc = +1;.    ** 
1f3e0 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72    }.    */.    r
1f3f0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 28 28  .default_rc = ((
1f400 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65  1 & (oc - OP_See
1f410 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29  kLT)) ? -1 : +1)
1f420 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
1f430 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72  !=OP_SeekGT || r
1f440 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20  .default_rc==-1 
1f450 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
1f460 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20  c!=OP_SeekLE || 
1f470 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31  r.default_rc==-1
1f480 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1f490 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  oc!=OP_SeekGE ||
1f4a0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b   r.default_rc==+
1f4b0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
1f4c0 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c   oc!=OP_SeekLT |
1f4d0 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
1f4e0 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65  +1 );..    r.aMe
1f4f0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
1f500 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  3];.#ifdef SQLIT
1f510 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e  E_DEBUG.    { in
1f520 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
1f530 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
1f540 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1f550 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
1f560 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 45 78   }.#endif.    Ex
1f570 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29  pandBlob(r.aMem)
1f580 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1f590 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1f5a0 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1f5b0 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
1f5c0 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  s);.    if( rc!=
1f5d0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1f5e0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1f5f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1f600 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65  }.  }.  pC->defe
1f610 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1f620 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1f630 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1f640 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
1f650 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  EST.  sqlite3_se
1f660 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
1f670 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f  ndif.  if( oc>=O
1f680 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73  P_SeekGE ){  ass
1f690 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1f6a0 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  GE || oc==OP_See
1f6b0 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72  kGT );.    if( r
1f6c0 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es<0 || (res==0 
1f6d0 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  && oc==OP_SeekGT
1f6e0 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  ) ){.      res =
1f6f0 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
1f700 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
1f710 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
1f720 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
1f730 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1f740 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1f750 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
1f760 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
1f770 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1f780 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d      assert( oc==
1f790 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d  OP_SeekLT || oc=
1f7a0 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20  =OP_SeekLE );.  
1f7b0 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28    if( res>0 || (
1f7c0 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
1f7d0 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20  _SeekLT) ){.    
1f7e0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
1f7f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1f800 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70  eePrevious(pC->p
1f810 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1f820 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1f830 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1f840 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1f850 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1f860 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20     /* res might 
1f870 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61  be negative beca
1f880 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73  use the table is
1f890 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74   empty.  Check t
1f8a0 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69  o.      ** see i
1f8b0 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61  f this is the ca
1f8c0 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  se..      */.   
1f8d0 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
1f8e0 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75  BtreeEof(pC->pCu
1f8f0 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
1f900 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1f910 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65 42 72  p2>0 );.  VdbeBr
1f920 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
1f930 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
1f940 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
1f950 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
1f960 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1f970 3a 20 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a  : Seek P1 P2 * *
1f980 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1f990 20 69 6e 74 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a   intkey=r[P2].**
1f9a0 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65  .** P1 is an ope
1f9b0 6e 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61  n table cursor a
1f9c0 6e 64 20 50 32 20 69 73 20 61 20 72 6f 77 69 64  nd P2 is a rowid
1f9d0 20 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e   integer.  Arran
1f9e0 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20  ge.** for P1 to 
1f9f0 6d 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74 20  move so that it 
1fa00 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f  points to the ro
1fa10 77 69 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e  wid given by P2.
1fa20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  .**.** This is a
1fa30 63 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72  ctually a deferr
1fa40 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e  ed seek.  Nothin
1fa50 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65  g actually happe
1fa60 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20  ns until.** the 
1fa70 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74  cursor is used t
1fa80 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e  o read a record.
1fa90 20 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e    That way, if n
1faa0 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72  o reads.** occur
1fab0 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79  , no unnecessary
1fac0 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f   I/O happens..*/
1fad0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b  .case OP_Seek: {
1fae0 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
1faf0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1fb00 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1fb10 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1fb20 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1fb30 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1fb40 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1fb50 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
1fb60 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
1fb70 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
1fb80 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1fb90 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1fba0 20 30 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d   0;.  pIn2 = &aM
1fbb0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
1fbc0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
1fbd0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
1fbe0 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 70  Value(pIn2);.  p
1fbf0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1fc00 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  o = 1;.  break;.
1fc10 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  }.  ../* Opcode:
1fc20 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20   Found P1 P2 P3 
1fc30 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1fc40 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1fc50 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
1fc60 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
1fc70 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
1fc80 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
1fc90 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
1fca0 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
1fcb0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1fcc0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1fcd0 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
1fce0 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
1fcf0 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50  ..**.** Cursor P
1fd00 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1fd10 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1fd20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1fd30 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1fd40 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66  * is a prefix of
1fd50 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
1fd60 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20   then a jump is 
1fd70 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a  made to P2 and.*
1fd80 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  * P1 is left poi
1fd90 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74  nting at the mat
1fda0 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a  ching entry..**.
1fdb0 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
1fdc0 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  n leaves the cur
1fdd0 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
1fde0 68 65 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a  here it can be.*
1fdf0 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68  * advanced in th
1fe00 65 20 66 6f 72 77 61 72 64 20 64 69 72 65 63 74  e forward direct
1fe10 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69  ion.  The Next i
1fe20 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20  nstruction will 
1fe30 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74  work,.** but not
1fe40 20 74 68 65 20 50 72 65 76 20 69 6e 73 74 72 75   the Prev instru
1fe50 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
1fe60 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
1fe70 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74   NoConflict, Not
1fe80 45 78 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a  Exists. SeekGe.*
1fe90 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  /./* Opcode: Not
1fea0 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
1feb0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1fec0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1fed0 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
1fee0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
1fef0 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
1ff00 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
1ff10 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
1ff20 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1ff30 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1ff40 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1ff50 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
1ff60 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
1ff70 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
1ff80 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1ff90 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1ffa0 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1ffb0 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1ffc0 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65  * is not the pre
1ffd0 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
1ffe0 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
1fff0 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
20000 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65  .  If P1 .** doe
20010 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74  s contain an ent
20020 72 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20  ry whose prefix 
20030 6d 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50  matches the P3/P
20040 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f  4 record then co
20050 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74  ntrol.** falls t
20060 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
20070 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
20080 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  nd P1 is left po
20090 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a  inting at the.**
200a0 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
200b0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
200c0 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
200d0 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
200e0 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
200f0 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  ot be.** advance
20100 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  d in either dire
20110 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
20120 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
20130 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63   and Prev.** opc
20140 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b  odes do not work
20150 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72   after this oper
20160 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ation..**.** See
20170 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
20180 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c  tExists, NoConfl
20190 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ict.*/./* Opcode
201a0 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20  : NoConflict P1 
201b0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
201c0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
201d0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
201e0 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
201f0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
20200 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
20210 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
20220 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
20230 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
20240 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
20250 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
20260 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
20270 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
20280 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
20290 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
202a0 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
202b0 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
202c0 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e  nd P4.** contain
202d0 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65  s any NULL value
202e0 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  , jump immediate
202f0 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c  ly to P2.  If al
20300 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a  l terms of the.*
20310 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74  * record are not
20320 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65  -NULL then a che
20330 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65  ck is done to de
20340 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72  termine if any r
20350 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20  ow in the.** P1 
20360 69 6e 64 65 78 20 62 74 72 65 65 20 68 61 73 20  index btree has 
20370 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70  a matching key p
20380 72 65 66 69 78 2e 20 20 49 66 20 74 68 65 72 65  refix.  If there
20390 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c   are no matches,
203a0 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61   jump.** immedia
203b0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
203c0 74 68 65 72 65 20 69 73 20 61 20 6d 61 74 63 68  there is a match
203d0 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61  , fall through a
203e0 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a  nd leave the P1.
203f0 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  ** cursor pointi
20400 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69  ng to the matchi
20410 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68  ng row..**.** Th
20420 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d  is opcode is sim
20430 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f  ilar to OP_NotFo
20440 75 6e 64 20 77 69 74 68 20 74 68 65 20 65 78 63  und with the exc
20450 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65  eptions that the
20460 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c  .** branch is al
20470 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e  ways taken if an
20480 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 65  y part of the se
20490 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69  arch key input i
204a0 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  s NULL..**.** Th
204b0 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
204c0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
204d0 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
204e0 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20  it cannot be.** 
204f0 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68  advanced in eith
20500 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
20510 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
20520 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
20530 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e  .** opcodes do n
20540 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68  ot work after th
20550 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a  is operation..**
20560 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
20570 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e  tFound, Found, N
20580 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65  otExists.*/.case
20590 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20   OP_NoConflict: 
205a0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
205b0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46   */.case OP_NotF
205c0 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a  ound:       /* j
205d0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
205e0 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20   OP_Found: {    
205f0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
20600 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64   */.  int alread
20610 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74 20 74  yExists;.  int t
20620 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e 74 20 69  akeJump;.  int i
20630 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  i;.  VdbeCursor 
20640 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
20650 20 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20    char *pFree;. 
20660 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
20670 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61  *pIdxKey;.  Unpa
20680 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20  ckedRecord r;.  
20690 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f  char aTempRec[RO
206a0 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61  UND8(sizeof(Unpa
206b0 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73  ckedRecord)) + s
206c0 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37  izeof(Mem)*4 + 7
206d0 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ];..#ifdef SQLIT
206e0 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70  E_TEST.  if( pOp
206f0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43  ->opcode!=OP_NoC
20700 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65  onflict ) sqlite
20710 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b  3_found_count++;
20720 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72  .#endif..  asser
20730 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
20740 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
20750 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
20760 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
20770 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d  _INT32 );.  pC =
20780 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
20790 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
207a0 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51  !=0 );.#ifdef SQ
207b0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
207c0 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f  >seekOp = pOp->o
207d0 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20  pcode;.#endif.  
207e0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
207f0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
20800 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
20810 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
20820 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
20830 20 70 46 72 65 65 20 3d 20 30 3b 0a 20 20 69 66   pFree = 0;.  if
20840 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b  ( pOp->p4.i>0 ){
20850 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
20860 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
20870 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
20880 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
20890 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33     r.aMem = pIn3
208a0 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  ;.    for(ii=0; 
208b0 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b  ii<r.nField; ii+
208c0 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
208d0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
208e0 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20  aMem[ii]) );.   
208f0 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 26 72     ExpandBlob(&r
20900 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69 66 64  .aMem[ii]);.#ifd
20910 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
20920 20 20 20 20 20 20 69 66 28 20 69 69 20 29 20 52        if( ii ) R
20930 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
20940 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65  p->p3+ii, &r.aMe
20950 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66 0a 20  m[ii]);.#endif. 
20960 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65 79     }.    pIdxKey
20970 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a   = &r;.  }else{.
20980 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71      pIdxKey = sq
20990 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e  lite3VdbeAllocUn
209a0 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a 20 20  packedRecord(.  
209b0 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e        pC->pKeyIn
209c0 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73 69  fo, aTempRec, si
209d0 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c 20  zeof(aTempRec), 
209e0 26 70 46 72 65 65 0a 20 20 20 20 29 3b 0a 20 20  &pFree.    );.  
209f0 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30    if( pIdxKey==0
20a00 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
20a10 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
20a20 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
20a30 6f 62 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64  ob );.    Expand
20a40 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20  Blob(pIn3);.    
20a50 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72  sqlite3VdbeRecor
20a60 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79  dUnpack(pC->pKey
20a70 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70  Info, pIn3->n, p
20a80 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29  In3->z, pIdxKey)
20a90 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d  ;.  }.  pIdxKey-
20aa0 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  >default_rc = 0;
20ab0 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30 3b  .  takeJump = 0;
20ac0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
20ad0 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  de==OP_NoConflic
20ae0 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20  t ){.    /* For 
20af0 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  the OP_NoConflic
20b00 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74  t opcode, take t
20b10 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f  he jump if any o
20b20 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70  f the.    ** inp
20b30 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55  ut fields are NU
20b40 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65  LL, since any ke
20b50 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69  y with a NULL wi
20b60 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f  ll not.    ** co
20b70 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f  nflict */.    fo
20b80 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b  r(ii=0; ii<pIdxK
20b90 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  ey->nField; ii++
20ba0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  ){.      if( pId
20bb0 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66  xKey->aMem[ii].f
20bc0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
20bd0 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65 4a  ){.        takeJ
20be0 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  ump = 1;.       
20bf0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
20c00 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d      }.  }.  rc =
20c10 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
20c20 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
20c30 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79  pCursor, pIdxKey
20c40 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
20c50 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
20c60 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 69 66 28  b, pFree);.  if(
20c70 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
20c80 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
20c90 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
20ca0 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65 61  t = res;.  alrea
20cb0 64 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d  dyExists = (res=
20cc0 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  =0);.  pC->nullR
20cd0 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45 78  ow = 1-alreadyEx
20ce0 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65  ists;.  pC->defe
20cf0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
20d00 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
20d10 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
20d20 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
20d30 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a  de==OP_Found ){.
20d40 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
20d50 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74  ken(alreadyExist
20d60 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
20d70 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29   alreadyExists )
20d80 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
20d90 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
20da0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 74  dbeBranchTaken(t
20db0 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65 61 64 79  akeJump||already
20dc0 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20  Exists==0,2);.  
20dd0 20 20 69 66 28 20 74 61 6b 65 4a 75 6d 70 20 7c    if( takeJump |
20de0 7c 20 21 61 6c 72 65 61 64 79 45 78 69 73 74 73  | !alreadyExists
20df0 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
20e00 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
20e10 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
20e20 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50  otExists P1 P2 P
20e30 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
20e40 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a  s: intkey=r[P3].
20e50 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
20e60 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f  index of a curso
20e70 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c  r open on an SQL
20e80 20 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69   table btree (wi
20e90 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65  th integer.** ke
20ea0 79 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69  ys).  P3 is an i
20eb0 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49  nteger rowid.  I
20ec0 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f  f P1 does not co
20ed0 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77  ntain a record w
20ee0 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20  ith.** rowid P3 
20ef0 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
20f00 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72  ately to P2.  Or
20f10 2c 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61  , if P2 is 0, ra
20f20 69 73 65 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ise an.** SQLITE
20f30 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20  _CORRUPT error. 
20f40 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61  If P1 does conta
20f50 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  in a record with
20f60 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a   rowid P3 then .
20f70 2a 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72  ** leave the cur
20f80 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  sor pointing at 
20f90 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20  that record and 
20fa0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
20fb0 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74  the next.** inst
20fc0 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
20fd0 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f  he OP_NotFound o
20fe0 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
20ff0 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
21000 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n on index btree
21010 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74  s.** (with arbit
21020 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65  rary multi-value
21030 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68   keys)..**.** Th
21040 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
21050 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
21060 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
21070 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63  cannot be advanc
21080 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20  ed.** in either 
21090 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
210a0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
210b0 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70  Next and Prev op
210c0 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f  codes will.** no
210d0 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67  t work following
210e0 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
210f0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
21100 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  und, NotFound, N
21110 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61 73  oConflict.*/.cas
21120 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20  e OP_NotExists: 
21130 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
21140 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43  , in3 */.  VdbeC
21150 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
21160 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
21170 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69  int res;.  u64 i
21180 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26  Key;..  pIn3 = &
21190 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
211a0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
211b0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
211c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
211d0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
211e0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
211f0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
21200 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
21210 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
21220 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
21230 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
21240 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65  0;.#endif.  asse
21250 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
21260 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21270 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
21280 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
21290 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
212a0 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
212b0 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  );.  res = 0;.  
212c0 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  iKey = pIn3->u.i
212d0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
212e0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
212f0 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b  ked(pCrsr, 0, iK
21300 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
21310 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
21320 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20  TE_OK || res==0 
21330 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  );.  pC->movetoT
21340 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f  arget = iKey;  /
21350 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c  * Used by OP_Del
21360 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c  ete */.  pC->nul
21370 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  lRow = 0;.  pC->
21380 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
21390 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
213a0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
213b0 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  = 0;.  VdbeBranc
213c0 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
213d0 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ;.  pC->seekResu
213e0 6c 74 20 3d 20 72 65 73 3b 0a 20 20 69 66 28 20  lt = res;.  if( 
213f0 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  res!=0 ){.    as
21400 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
21410 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 70  _OK );.    if( p
21420 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20  Op->p2==0 ){.   
21430 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
21440 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
21450 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f   }else{.      go
21460 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
21470 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
21480 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
21490 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a  Sequence P1 P2 *
214a0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
214b0 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50  : r[P2]=cursor[P
214c0 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46  1].ctr++.**.** F
214d0 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61  ind the next ava
214e0 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20  ilable sequence 
214f0 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f  number for curso
21500 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74  r P1..** Write t
21510 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
21520 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  er into register
21530 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75   P2..** The sequ
21540 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74  ence number on t
21550 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63  he cursor is inc
21560 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74  remented after t
21570 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  his.** instructi
21580 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  on.  .*/.case OP
21590 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20  _Sequence: {    
215a0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
215b0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
215c0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
215d0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
215e0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
215f0 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29  sr[pOp->p1]!=0 )
21600 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
21610 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
21620 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
21630 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21640 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a  1]->seqCount++;.
21650 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
21660 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64  Opcode: NewRowid
21670 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
21680 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
21690 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74  =rowid.**.** Get
216a0 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72   a new integer r
216b0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e  ecord number (a.
216c0 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65  k.a "rowid") use
216d0 64 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20  d as the key to 
216e0 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  a table..** The 
216f0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
21700 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
21710 75 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e  used as a key in
21720 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
21730 20 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73   table that curs
21740 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e  or P1 points to.
21750 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64    The new record
21760 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74   number is writt
21770 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f  en.** written to
21780 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
21790 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e  .** If P3>0 then
217a0 20 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65   P3 is a registe
217b0 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
217c0 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45  ame of this VDBE
217d0 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20   that holds .** 
217e0 74 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76  the largest prev
217f0 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64  iously generated
21800 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
21810 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75  No new record nu
21820 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c  mbers are.** all
21830 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20  owed to be less 
21840 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e  than this value.
21850 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65   When this value
21860 20 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78   reaches its max
21870 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c  imum, .** an SQL
21880 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69  ITE_FULL error i
21890 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65  s generated. The
218a0 20 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20   P3 register is 
218b0 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
218c0 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20   '.** generated 
218d0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54  record number. T
218e0 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d  his P3 mechanism
218f0 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70   is used to help
21900 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a   implement the.*
21910 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  * AUTOINCREMENT 
21920 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65  feature..*/.case
21930 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20   OP_NewRowid: { 
21940 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
21950 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20  2 */.  i64 v;   
21960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21970 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   The new rowid *
21980 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
21990 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75  pC;        /* Cu
219a0 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f  rsor of table to
219b0 20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77   get the new row
219c0 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  id */.  int res;
219d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
219e0 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73  * Result of an s
219f0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
21a00 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20  ) */.  int cnt; 
21a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21a20 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69   Counter to limi
21a30 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
21a40 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65  searches */.  Me
21a50 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
21a60 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
21a70 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74   holding largest
21a80 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49   rowid for AUTOI
21a90 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64  NCREMENT */.  Vd
21aa0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
21ab0 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61       /* Root fra
21ac0 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20  me of VDBE */.. 
21ad0 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20   v = 0;.  res = 
21ae0 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  0;.  pOut = out2
21af0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
21b00 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p);.  assert( pO
21b10 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21b20 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21b30 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21b40 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21b50 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
21b60 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
21b70 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a 20  rsor!=0 );.  {. 
21b80 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72     /* The next r
21b90 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e  owid or record n
21ba0 75 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74  umber (different
21bb0 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73   terms for the s
21bc0 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67  ame.    ** thing
21bd0 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e  ) is obtained in
21be0 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f   a two-step algo
21bf0 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20  rithm..    **.  
21c00 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74    ** First we at
21c10 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68  tempt to find th
21c20 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69  e largest existi
21c30 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64  ng rowid and add
21c40 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74   one.    ** to t
21c50 68 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65  hat.  But if the
21c60 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
21c70 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61  g rowid is alrea
21c80 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20  dy the maximum. 
21c90 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69     ** positive i
21ca0 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20  nteger, we have 
21cb0 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  to fall through 
21cc0 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20  to the second.  
21cd0 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74    ** probabilist
21ce0 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20  ic algorithm.   
21cf0 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73   **.    ** The s
21d00 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20  econd algorithm 
21d10 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72  is to select a r
21d20 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  owid at random a
21d30 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a  nd see if.    **
21d40 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73   it already exis
21d50 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ts in the table.
21d60 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
21d70 20 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a   exist, we have.
21d80 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64      ** succeeded
21d90 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d  .  If the random
21da0 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73   rowid does exis
21db0 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e  t, we select a n
21dc0 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e  ew one.    ** an
21dd0 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20  d try again, up 
21de0 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20  to 100 times..  
21df0 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
21e00 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
21e10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33  .#ifdef SQLITE_3
21e20 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64  2BIT_ROWID.#   d
21e30 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
21e40 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65  0x7fffffff.#else
21e50 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d  .    /* Some com
21e60 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20  pilers complain 
21e70 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20  about constants 
21e80 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66  of the form 0x7f
21e90 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a  ffffffffffffff..
21ea0 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f      ** Others co
21eb0 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37  mplain about 0x7
21ec0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  ffffffffffffffff
21ed0 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  LL.  The followi
21ee0 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20  ng macro seems. 
21ef0 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65     ** to provide
21f00 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68   the constant wh
21f10 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63  ile making all c
21f20 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a  ompilers happy..
21f30 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e      */.#   defin
21f40 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36  e MAX_ROWID  (i6
21f50 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66  4)( (((u64)0x7ff
21f60 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75  fffff)<<32) | (u
21f70 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a  64)0xffffffff ).
21f80 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20  #endif..    if( 
21f90 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f  !pC->useRandomRo
21fa0 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20  wid ){.      rc 
21fb0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
21fc0 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  st(pC->pCursor, 
21fd0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
21fe0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
21ff0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
22000 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
22010 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
22020 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
22030 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20      v = 1;   /* 
22040 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30  IMP: R-61914-480
22050 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73  74 */.      }els
22060 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  e{.        asser
22070 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
22080 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d  ursorIsValid(pC-
22090 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >pCursor) );.   
220a0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
220b0 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
220c0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  ->pCursor, &v);.
220d0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
220e0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
220f0 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69     /* Cannot fai
22100 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65  l following Btre
22110 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20  eLast() */.     
22120 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f     if( v>=MAX_RO
22130 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20  WID ){.         
22140 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
22150 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  wid = 1;.       
22160 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
22170 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a    v++;   /* IMP:
22180 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a   R-29538-34987 *
22190 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  /.        }.    
221a0 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64    }.    }..#ifnd
221b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
221c0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20  UTOINCREMENT.   
221d0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
221e0 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
221f0 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
22200 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
22210 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
22220 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
22230 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d      if( p->pFram
22240 65 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  e ){.        for
22250 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
22260 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
22270 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
22280 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
22290 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
222a0 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
222b0 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
222c0 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
222d0 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d  ( pOp->p3<=pFram
222e0 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  e->nMem );.     
222f0 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d     pMem = &pFram
22300 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  e->aMem[pOp->p3]
22310 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
22320 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
22330 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
22340 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
22350 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
22360 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
22370 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
22380 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65  ) );.        pMe
22390 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
223a0 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41  3];.        memA
223b0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
223c0 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  pMem);.      }. 
223d0 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
223e0 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b  IsValid(pMem) );
223f0 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ..      REGISTER
22400 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
22410 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c  pMem);.      sql
22420 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
22430 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20  erify(pMem);.   
22440 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d     assert( (pMem
22450 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
22460 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d  t)!=0 );  /* mem
22470 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e  (P3) holds an in
22480 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 69  teger */.      i
22490 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41  f( pMem->u.i==MA
224a0 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75  X_ROWID || pC->u
224b0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
224c0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
224d0 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20  LITE_FULL;   /* 
224e0 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36 31 33  IMP: R-12275-613
224f0 33 38 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f  38 */.        go
22500 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
22510 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
22520 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d       if( v<pMem-
22530 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20  >u.i+1 ){.      
22540 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20    v = pMem->u.i 
22550 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  + 1;.      }.   
22560 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76     pMem->u.i = v
22570 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
22580 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61     if( pC->useRa
22590 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
225a0 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41     /* IMPLEMENTA
225b0 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37  TION-OF: R-07677
225c0 2d 34 31 38 38 31 20 49 66 20 74 68 65 20 6c 61  -41881 If the la
225d0 72 67 65 73 74 20 52 4f 57 49 44 20 69 73 20 65  rgest ROWID is e
225e0 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20  qual to the.    
225f0 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73    ** largest pos
22600 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39  sible integer (9
22610 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
22620 30 37 29 20 74 68 65 6e 20 74 68 65 20 64 61 74  07) then the dat
22630 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65  abase.      ** e
22640 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70 69 63  ngine starts pic
22650 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61  king positive ca
22660 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73 20 61  ndidate ROWIDs a
22670 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20  t random until. 
22680 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73       ** it finds
22690 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74   one that is not
226a0 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
226b0 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  . */.      asser
226c0 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b  t( pOp->p3==0 );
226d0 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62    /* We cannot b
226e0 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69  e in random rowi
226f0 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69  d mode if this i
22700 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s.              
22710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
22720 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  * an AUTOINCREME
22730 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20  NT table. */.   
22740 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20     cnt = 0;.    
22750 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 73 71    do{.        sq
22760 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73  lite3_randomness
22770 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b  (sizeof(v), &v);
22780 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d  .        v &= (M
22790 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76 2b  AX_ROWID>>1); v+
227a0 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20 74 68  +;  /* Ensure th
227b0 61 74 20 76 20 69 73 20 67 72 65 61 74 65 72 20  at v is greater 
227c0 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 20  than zero */.   
227d0 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28 72 63     }while(  ((rc
227e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
227f0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
22800 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75  ->pCursor, 0, (u
22810 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20  64)v,.          
22820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22840 20 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29         0, &res))
22850 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20  ==SQLITE_OK).   
22860 20 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73           && (res
22870 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20  ==0).           
22880 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29   && (++cnt<100))
22890 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
228a0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
228b0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
228c0 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
228d0 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32     /* IMP: R-382
228e0 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20  19-53002 */.    
228f0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
22900 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
22910 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
22920 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56  t( v>0 );  /* EV
22930 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20  : R-40812-03570 
22940 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  */.    }.    pC-
22950 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
22960 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
22970 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
22980 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f  _STALE;.  }.  pO
22990 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62  ut->u.i = v;.  b
229a0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
229b0 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32  de: Insert P1 P2
229c0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
229d0 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
229e0 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a  P3] data=r[P2].*
229f0 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e  *.** Write an en
22a00 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62  try into the tab
22a10 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e  le of cursor P1.
22a20 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73    A new entry is
22a30 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69  .** created if i
22a40 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64  t doesn't alread
22a50 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64  y exist or the d
22a60 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74  ata for an exist
22a70 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20  ing.** entry is 
22a80 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68  overwritten.  Th
22a90 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61  e data is the va
22aa0 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f  lue MEM_Blob sto
22ab0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a  red in register.
22ac0 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68  ** number P2. Th
22ad0 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20  e key is stored 
22ae0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
22af0 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20  The key must.** 
22b00 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a  be a MEM_Int..**
22b10 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
22b20 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
22b30 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
22b40 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  n the row change
22b50 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63   count is.** inc
22b60 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
22b70 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68  ise not).  If th
22b80 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
22b90 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  ID flag of P5 is
22ba0 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f   set,.** then ro
22bb0 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f  wid is stored fo
22bc0 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74  r subsequent ret
22bd0 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  urn by the.** sq
22be0 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
22bf0 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69  t_rowid() functi
22c00 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74  on (otherwise it
22c10 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e   is unmodified).
22c20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
22c30 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
22c40 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  LT flag of P5 is
22c50 20 73 65 74 20 61 6e 64 20 69 66 20 74 68 65 20   set and if the 
22c60 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65  result of.** the
22c70 20 6c 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61   last seek opera
22c80 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73  tion (OP_NotExis
22c90 74 73 29 20 77 61 73 20 61 20 73 75 63 63 65 73  ts) was a succes
22ca0 73 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20  s, then this.** 
22cb0 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e  operation will n
22cc0 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  ot attempt to fi
22cd0 6e 64 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  nd the appropria
22ce0 74 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64 6f  te row before do
22cf0 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72  ing.** the inser
22d00 74 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74 65  t but will inste
22d10 61 64 20 6f 76 65 72 77 72 69 74 65 20 74 68 65  ad overwrite the
22d20 20 72 6f 77 20 74 68 61 74 20 74 68 65 20 63 75   row that the cu
22d30 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72 65  rsor is.** curre
22d40 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
22d50 2e 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20 74  .  Presumably, t
22d60 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45  he prior OP_NotE
22d70 78 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20  xists opcode.** 
22d80 68 61 73 20 61 6c 72 65 61 64 79 20 70 6f 73 69  has already posi
22d90 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f  tioned the curso
22da0 72 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68  r correctly.  Th
22db0 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a  is is an optimiz
22dc0 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f  ation.** that bo
22dd0 6f 73 74 73 20 70 65 72 66 6f 72 6d 61 6e 63 65  osts performance
22de0 20 62 79 20 61 76 6f 69 64 69 6e 67 20 72 65 64   by avoiding red
22df0 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a  undant seeks..**
22e00 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
22e10 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20  G_ISUPDATE flag 
22e20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69  is set, then thi
22e30 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74  s opcode is part
22e40 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45   of an.** UPDATE
22e50 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68   operation.  Oth
22e60 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66  erwise (if the f
22e70 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68  lag is clear) th
22e80 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a  en this opcode.*
22e90 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20  * is part of an 
22ea0 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e  INSERT operation
22eb0 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  .  The differenc
22ec0 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74  e is only import
22ed0 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70  ant to.** the up
22ee0 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a  date hook..**.**
22ef0 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61   Parameter P4 ma
22f00 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72  y point to a str
22f10 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
22f20 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f  he table-name, o
22f30 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c  r.** may be NULL
22f40 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e  . If it is not N
22f50 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70  ULL, then the up
22f60 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73  date-hook .** (s
22f70 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61  qlite3.xUpdateCa
22f80 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b  llback) is invok
22f90 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73  ed following a s
22fa0 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74  uccessful insert
22fb0 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47  ..**.** (WARNING
22fc0 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20  /TODO: If P1 is 
22fd0 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20  a pseudo-cursor 
22fe0 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69  and P2 is dynami
22ff0 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  cally.** allocat
23000 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68  ed, then ownersh
23010 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e  ip of P2 is tran
23020 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70  sferred to the p
23030 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20  seudo-cursor.** 
23040 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20  and register P2 
23050 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61  becomes ephemera
23060 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f  l.  If the curso
23070 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68  r is changed, th
23080 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65  e.** value of re
23090 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74  gister P2 will t
230a0 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b  hen change.  Mak
230b0 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73  e sure this does
230c0 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e   not.** cause an
230d0 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a  y problems.).**.
230e0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
230f0 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  ion only works o
23100 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65  n tables.  The e
23110 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
23120 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64  ction.** for ind
23130 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e  ices is OP_IdxIn
23140 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  sert..*/./* Opco
23150 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31  de: InsertInt P1
23160 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
23170 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65  Synopsis:  intke
23180 79 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a  y=P3 data=r[P2].
23190 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
231a0 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50   exactly like OP
231b0 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20 74  _Insert except t
231c0 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20 74  hat the key is t
231d0 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61  he.** integer va
231e0 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20  lue P3, not the 
231f0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74  value of the int
23200 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72  eger stored in r
23210 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63  egister P3..*/.c
23220 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a  ase OP_Insert: .
23230 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e  case OP_InsertIn
23240 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74  t: {.  Mem *pDat
23250 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  a;       /* MEM 
23260 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74  cell holding dat
23270 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  a for the record
23280 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
23290 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20  */.  Mem *pKey; 
232a0 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
232b0 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20  ll holding key  
232c0 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
232d0 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  /.  i64 iKey;   
232e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74        /* The int
232f0 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65  eger ROWID or ke
23300 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  y for the record
23310 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
23320 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
23330 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72  *pC;   /* Cursor
23340 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77   to table into w
23350 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77  hich insert is w
23360 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  ritten */.  int 
23370 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a  nZero;        /*
23380 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d   Number of zero-
23390 62 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64 20  bytes to append 
233a0 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73  */.  int seekRes
233b0 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74  ult;   /* Result
233c0 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f   of prior seek o
233d0 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45  r 0 if no USESEE
233e0 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a  KRESULT flag */.
233f0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
23400 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20  b;  /* database 
23410 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74  name - used by t
23420 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he update hook *
23430 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
23440 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e  zTbl; /* Table n
23450 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68  ame - used by th
23460 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e opdate hook */
23470 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20  .  int op;      
23480 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66       /* Opcode f
23490 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20  or update hook: 
234a0 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72  SQLITE_UPDATE or
234b0 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a   SQLITE_INSERT *
234c0 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d  /..  pData = &aM
234d0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
234e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
234f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
23500 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
23510 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
23520 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d  pData) );.  pC =
23530 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
23540 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
23550 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
23560 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
23570 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
23580 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
23590 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
235a0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
235b0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
235c0 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b  pOp->p2, pData);
235d0 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ..  if( pOp->opc
235e0 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29  ode==OP_Insert )
235f0 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d  {.    pKey = &aM
23600 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
23610 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66   assert( pKey->f
23620 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
23630 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
23640 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29  mIsValid(pKey) )
23650 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
23660 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b  RACE(pOp->p3, pK
23670 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  ey);.    iKey = 
23680 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c  pKey->u.i;.  }el
23690 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
236a0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
236b0 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20  InsertInt );.   
236c0 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b   iKey = pOp->p3;
236d0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d  .  }..  if( pOp-
236e0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p5 & OPFLAG_NCH
236f0 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
23700 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  e++;.  if( pOp->
23710 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54  p5 & OPFLAG_LAST
23720 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74  ROWID ) db->last
23730 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
23740 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28 20  d = iKey;.  if( 
23750 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
23760 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
23770 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20  Data->z = 0;.   
23780 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20   pData->n = 0;. 
23790 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
237a0 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  rt( pData->flags
237b0 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d   & (MEM_Blob|MEM
237c0 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73  _Str) );.  }.  s
237d0 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f  eekResult = ((pO
237e0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
237f0 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
23800 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
23810 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61   0);.  if( pData
23820 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
23830 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20  ro ){.    nZero 
23840 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f  = pData->u.nZero
23850 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  ;.  }else{.    n
23860 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Zero = 0;.  }.  
23870 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23880 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72  eInsert(pC->pCur
23890 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20  sor, 0, iKey,.  
238a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238b0 20 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a          pData->z
238c0 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72  , pData->n, nZer
238d0 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  o,.             
238e0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 4f               (pO
238f0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41  p->p5 & OPFLAG_A
23900 50 50 45 4e 44 29 21 3d 30 2c 20 73 65 65 6b 52  PPEND)!=0, seekR
23910 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d  esult.  );.  pC-
23920 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
23930 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
23940 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
23950 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  TALE;..  /* Invo
23960 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
23970 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
23980 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  */.  if( rc==SQL
23990 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55  ITE_OK && db->xU
239a0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
239b0 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
239c0 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b    zDb = db->aDb[
239d0 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a  pC->iDb].zName;.
239e0 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e      zTbl = pOp->
239f0 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28  p4.z;.    op = (
23a00 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
23a10 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51  G_ISUPDATE) ? SQ
23a20 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51  LITE_UPDATE : SQ
23a30 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20  LITE_INSERT);.  
23a40 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
23a50 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d  Table );.    db-
23a60 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
23a70 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
23a80 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20   op, zDb, zTbl, 
23a90 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72  iKey);.    asser
23aa0 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
23ab0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
23ac0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65  ./* Opcode: Dele
23ad0 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  te P1 P2 * P4 P5
23ae0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
23af0 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
23b00 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  h the P1 cursor 
23b10 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
23b20 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  nting..**.** If 
23b30 74 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  the P5 parameter
23b40 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
23b50 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
23b60 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
23b70 74 20 0a 2a 2a 20 65 69 74 68 65 72 20 74 68 65  t .** either the
23b80 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65   next or the pre
23b90 76 69 6f 75 73 20 72 65 63 6f 72 64 20 69 6e 20  vious record in 
23ba0 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74  the table. If it
23bb0 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f 69   is left .** poi
23bc0 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78  nting at the nex
23bd0 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 74  t record, then t
23be0 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73  he next Next ins
23bf0 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65  truction will be
23c00 20 61 20 0a 2a 2a 20 6e 6f 2d 6f 70 2e 20 41 73   a .** no-op. As
23c10 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20 74 68   a result, in th
23c20 69 73 20 63 61 73 65 20 69 74 20 69 73 20 4f 4b  is case it is OK
23c30 20 74 6f 20 64 65 6c 65 74 65 20 61 20 72 65 63   to delete a rec
23c40 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ord from within 
23c50 61 0a 2a 2a 20 4e 65 78 74 20 6c 6f 6f 70 2e 20  a.** Next loop. 
23c60 49 66 20 50 35 20 69 73 20 7a 65 72 6f 2c 20 74  If P5 is zero, t
23c70 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
23c80 73 20 6c 65 66 74 20 69 6e 20 61 6e 20 75 6e 64  s left in an und
23c90 65 66 69 6e 65 64 20 73 74 61 74 65 2e 0a 2a 2a  efined state..**
23ca0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
23cb0 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
23cc0 66 20 50 32 20 69 73 20 73 65 74 2c 20 74 68 65  f P2 is set, the
23cd0 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  n the row change
23ce0 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63   count is.** inc
23cf0 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
23d00 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20  ise not)..**.** 
23d10 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70  P1 must not be p
23d20 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74  seudo-table.  It
23d30 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61   has to be a rea
23d40 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20  l table with.** 
23d50 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a  multiple rows..*
23d60 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
23d70 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20  t NULL, then it 
23d80 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
23d90 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 50 31  he table that P1
23da0 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20   is.** pointing 
23db0 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65 20  to.  The update 
23dc0 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76  hook will be inv
23dd0 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69 73  oked, if it exis
23de0 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  ts..** If P4 is 
23df0 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  not NULL then th
23e00 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
23e10 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74   have been posit
23e20 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f  ioned.** using O
23e30 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72  P_NotFound prior
23e40 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69   to invoking thi
23e50 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
23e60 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20  e OP_Delete: {. 
23e70 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
23e80 0a 20 20 75 38 20 68 61 73 55 70 64 61 74 65 43  .  u8 hasUpdateC
23e90 61 6c 6c 62 61 63 6b 3b 0a 0a 20 20 61 73 73 65  allback;..  asse
23ea0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
23eb0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
23ec0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
23ed0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
23ee0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
23ef0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23f00 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
23f10 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20    /* Only valid 
23f20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73 2c  for real tables,
23f30 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65 73   no pseudotables
23f40 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43   */.  assert( pC
23f50 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
23f60 3d 3d 30 20 29 3b 0a 0a 20 20 68 61 73 55 70 64  ==0 );..  hasUpd
23f70 61 74 65 43 61 6c 6c 62 61 63 6b 20 3d 20 64 62  ateCallback = db
23f80 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
23f90 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 26  k && pOp->p4.z &
23fa0 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 3b 0a 20  & pC->isTable;. 
23fb0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20   if( pOp->p5 && 
23fc0 68 61 73 55 70 64 61 74 65 43 61 6c 6c 62 61 63  hasUpdateCallbac
23fd0 6b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  k ){.    sqlite3
23fe0 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
23ff0 3e 70 43 75 72 73 6f 72 2c 20 26 70 43 2d 3e 6d  >pCursor, &pC->m
24000 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20  ovetoTarget);.  
24010 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
24020 5f 44 45 42 55 47 0a 20 20 2f 2a 20 54 68 65 20  _DEBUG.  /* The 
24030 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74  seek operation t
24040 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74  hat positioned t
24050 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20  he cursor prior 
24060 74 6f 20 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c  to OP_Delete wil
24070 6c 0a 20 20 2a 2a 20 68 61 76 65 20 61 6c 73 6f  l.  ** have also
24080 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76   set the pC->mov
24090 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20  etoTarget field 
240a0 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  to the rowid of 
240b0 74 68 65 20 72 6f 77 20 74 68 61 74 0a 20 20 2a  the row that.  *
240c0 2a 20 69 73 20 62 65 69 6e 67 20 64 65 6c 65 74  * is being delet
240d0 65 64 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  ed */.  if( pOp-
240e0 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54  >p4.z && pC->isT
240f0 61 62 6c 65 20 26 26 20 70 4f 70 2d 3e 70 35 3d  able && pOp->p5=
24100 3d 30 20 29 7b 0a 20 20 20 20 69 36 34 20 69 4b  =0 ){.    i64 iK
24110 65 79 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  ey = 0;.    sqli
24120 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
24130 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 69 4b  pC->pCursor, &iK
24140 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ey);.    assert(
24150 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
24160 74 3d 3d 69 4b 65 79 20 29 3b 20 0a 20 20 7d 0a  t==iKey ); .  }.
24170 23 65 6e 64 69 66 0a 20 0a 20 20 72 63 20 3d 20  #endif. .  rc = 
24180 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
24190 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  te(pC->pCursor, 
241a0 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e  pOp->p5);.  pC->
241b0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
241c0 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a  CHE_STALE;..  /*
241d0 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   Invoke the upda
241e0 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
241f0 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63  red. */.  if( rc
24200 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 68  ==SQLITE_OK && h
24210 61 73 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  asUpdateCallback
24220 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   ){.    db->xUpd
24230 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
24240 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49  pUpdateArg, SQLI
24250 54 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20 20  TE_DELETE,.     
24260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24270 20 20 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69     db->aDb[pC->i
24280 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d 3e  Db].zName, pOp->
24290 70 34 2e 7a 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f  p4.z, pC->moveto
242a0 54 61 72 67 65 74 29 3b 0a 20 20 20 20 61 73 73  Target);.    ass
242b0 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
242c0 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  );.  }.  if( pOp
242d0 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p2 & OPFLAG_NC
242e0 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
242f0 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ge++;.  break;.}
24300 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
24310 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a  tCount * * * * *
24320 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
24330 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   of the change c
24340 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64  ounter is copied
24350 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
24360 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67   handle.** chang
24370 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72  e counter (retur
24380 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e  ned by subsequen
24390 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  t calls to sqlit
243a0 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a  e3_changes())..*
243b0 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69  * Then the VMs i
243c0 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63  nternal change c
243d0 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f  ounter resets to
243e0 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75   0..** This is u
243f0 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
24400 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65  rograms..*/.case
24410 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20   OP_ResetCount: 
24420 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  {.  sqlite3VdbeS
24430 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
24440 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e  >nChange);.  p->
24450 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62  nChange = 0;.  b
24460 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
24470 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72  de: SorterCompar
24480 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a  e P1 P2 P3 P4.**
24490 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 6b   Synopsis:  if k
244a0 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50  ey(P1)!=trim(r[P
244b0 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a  3],P4) goto P2.*
244c0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
244d0 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73  ter cursor. This
244e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d   instruction com
244f0 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f  pares a prefix o
24500 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
24510 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
24520 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72   P3 against a pr
24530 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72  efix of the entr
24540 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73  y that .** the s
24550 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72  orter cursor cur
24560 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f  rently points to
24570 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73  .  Only the firs
24580 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f  t P4 fields.** o
24590 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20  f r[P3] and the 
245a0 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72  sorter record ar
245b0 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a  e compared..**.*
245c0 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f  * If either P3 o
245d0 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e  r the sorter con
245e0 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20  tains a NULL in 
245f0 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67  one of their sig
24600 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c  nificant.** fiel
24610 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67  ds (not counting
24620 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61   the P4 fields a
24630 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20  t the end which 
24640 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65  are ignored) the
24650 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  n.** the compari
24660 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74  son is assumed t
24670 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a  o be equal..**.*
24680 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
24690 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  o next instructi
246a0 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65  on if the two re
246b0 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71  cords compare eq
246c0 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f  ual to.** each o
246d0 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50  ther.  Jump to P
246e0 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69  2 if they are di
246f0 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65  fferent..*/.case
24700 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72   OP_SorterCompar
24710 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
24720 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
24730 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b  ;.  int nKeyCol;
24740 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
24750 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
24760 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
24770 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  C) );.  assert( 
24780 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
24790 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20  INT32 );.  pIn3 
247a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
247b0 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f  ;.  nKeyCol = pO
247c0 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d  p->p4.i;.  res =
247d0 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
247e0 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70  e3VdbeSorterComp
247f0 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b  are(pC, pIn3, nK
24800 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20  eyCol, &res);.  
24810 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
24820 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
24830 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
24840 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
24850 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .};../* Opcode: 
24860 53 6f 72 74 65 72 44 61 74 61 20 50 31 20 50 32  SorterData P1 P2
24870 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
24880 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a  sis: r[P2]=data.
24890 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
248a0 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
248b0 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20   current sorter 
248c0 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20  data for sorter 
248d0 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
248e0 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c  en clear the col
248f0 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63 68 65  umn header cache
24900 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a   on cursor P3..*
24910 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
24920 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65   is normally use
24930 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72   to move a recor
24940 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72  d out of the sor
24950 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20  ter and into.** 
24960 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
24970 69 73 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f  is the source fo
24980 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  r a pseudo-table
24990 20 63 75 72 73 6f 72 20 63 72 65 61 74 65 64 20   cursor created 
249a0 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65  using.** OpenPse
249b0 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64  udo.  That pseud
249c0 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69  o-table cursor i
249d0 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69  s the one that i
249e0 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a  s identified by.
249f0 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e  ** parameter P3.
24a00 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50    Clearing the P
24a10 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61  3 column cache a
24a20 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f  s part of this o
24a30 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75  pcode saves.** u
24a40 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f  s from having to
24a50 20 69 73 73 75 65 20 61 20 73 65 70 61 72 61 74   issue a separat
24a60 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75  e NullRow instru
24a70 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74  ction to clear t
24a80 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61  hat cache..*/.ca
24a90 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61  se OP_SorterData
24aa0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
24ab0 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20   *pC;..  pOut = 
24ac0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
24ad0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24ae0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24af0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
24b00 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
24b10 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b  e3VdbeSorterRowk
24b20 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20  ey(pC, pOut);.  
24b30 61 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49  assert( rc!=SQLI
24b40 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e  TE_OK || (pOut->
24b50 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
24b60 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
24b70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
24b80 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
24b90 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f  );.  p->apCsr[pO
24ba0 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61  p->p3]->cacheSta
24bb0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
24bc0 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  E;.  break;.}../
24bd0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74  * Opcode: RowDat
24be0 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
24bf0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
24c00 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
24c10 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
24c20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
24c30 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72  row data for cur
24c40 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
24c50 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
24c60 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
24c70 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75  a.  .** It is ju
24c80 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  st copied onto t
24c90 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
24ca0 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
24cb0 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
24cc0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
24cd0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
24ce0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
24cf0 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
24d00 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
24d10 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
24d20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
24d30 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
24d40 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  */./* Opcode: Ro
24d50 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  wKey P1 P2 * * *
24d60 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
24d70 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72  P2]=key.**.** Wr
24d80 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
24d90 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
24da0 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75  e row key for cu
24db0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
24dc0 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
24dd0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
24de0 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79  ta.  .** The key
24df0 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20   is copied onto 
24e00 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
24e10 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
24e20 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
24e30 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
24e40 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
24e50 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
24e60 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
24e70 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
24e80 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
24e90 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
24ea0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
24eb0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b  .*/.case OP_RowK
24ec0 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44  ey:.case OP_RowD
24ed0 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
24ee0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
24ef0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33  sor *pCrsr;.  u3
24f00 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a  2 n;.  i64 n64;.
24f10 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
24f20 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
24f30 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
24f40 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74  pOut);..  /* Not
24f50 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e  e that RowKey an
24f60 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65  d RowData are re
24f70 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65  ally exactly the
24f80 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f   same instructio
24f90 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  n */.  assert( p
24fa0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
24fb0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
24fc0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
24fd0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
24fe0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
24ff0 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  pC)==0 );.  asse
25000 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
25010 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  || pOp->opcode!=
25020 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20  OP_RowData );.  
25030 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
25040 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f  ble==0 || pOp->o
25050 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74  pcode==OP_RowDat
25060 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  a );.  assert( p
25070 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
25080 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30  ( pC->nullRow==0
25090 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
250a0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
250b0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
250c0 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
250d0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
250e0 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20  >pCursor;..  /* 
250f0 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e  The OP_RowKey an
25100 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63  d OP_RowData opc
25110 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c  odes always foll
25120 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  ow OP_NotExists 
25130 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e  or.  ** OP_Rewin
25140 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e  d/Op_Next with n
25150 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e  o intervening in
25160 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20  structions that 
25170 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65  might invalidate
25180 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  .  ** the cursor
25190 2e 20 20 49 66 20 74 68 69 73 20 77 68 65 72 65  .  If this where
251a0 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f   not the case, o
251b0 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n of the followi
251c0 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a  ng assert()s.  *
251d0 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53  * would fail.  S
251e0 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72 20  hould this ever 
251f0 63 68 61 6e 67 65 20 28 62 65 63 61 75 73 65 20  change (because 
25200 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  of changes in th
25210 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65  e code.  ** gene
25220 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20  rator) then the 
25230 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20  fix would be to 
25240 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f  insert a call to
25250 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
25260 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e  eCursorMoveto().
25270 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
25280 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
25290 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
252a0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
252b0 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
252c0 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a  sr) );.#if 0  /*
252d0 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64 75   Not required du
252e0 65 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  e to the previou
252f0 73 20 74 6f 20 61 73 73 65 72 74 28 29 20 73 74  s to assert() st
25300 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63  atements */.  rc
25310 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
25320 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
25330 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
25340 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
25350 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
25360 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d  endif..  if( pC-
25370 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20  >isTable==0 ){. 
25380 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e     assert( !pC->
25390 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56  isTable );.    V
253a0 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
253b0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
253c0 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a  e(pCrsr, &n64);.
253d0 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
253e0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20  SQLITE_OK );    
253f0 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20  /* True because 
25400 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
25410 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a  ) call above */.
25420 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e      if( n64>db->
25430 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
25440 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
25450 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
25460 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d  g;.    }.    n =
25470 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c   (u32)n64;.  }el
25480 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59  se{.    VVA_ONLY
25490 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
254a0 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
254b0 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65  r, &n);.    asse
254c0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
254d0 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53  K );    /* DataS
254e0 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69  ize() cannot fai
254f0 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28  l */.    if( n>(
25500 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
25510 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
25520 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
25530 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
25540 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28  .  }.  testcase(
25550 20 6e 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 73   n==0 );.  if( s
25560 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
25570 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74  arAndResize(pOut
25580 2c 20 4d 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a  , MAX(n,32)) ){.
25590 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
255a0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  .  }.  pOut->n =
255b0 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65   n;.  MemSetType
255c0 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42  Flag(pOut, MEM_B
255d0 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  lob);.  if( pC->
255e0 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
255f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
25600 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c  reeKey(pCrsr, 0,
25610 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20   n, pOut->z);.  
25620 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
25630 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
25640 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
25650 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f  ut->z);.  }.  pO
25660 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
25670 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
25680 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
25690 76 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74  ver cast to text
256a0 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58   */.  UPDATE_MAX
256b0 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
256c0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
256d0 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
256e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
256f0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50   Opcode: Rowid P
25700 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
25710 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
25720 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  wid.**.** Store 
25730 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61  in register P2 a
25740 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
25750 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68  is the key of th
25760 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68  e table entry th
25770 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72  at.** P1 is curr
25780 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a  ently point to..
25790 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20  **.** P1 can be 
257a0 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61  either an ordina
257b0 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69  ry table or a vi
257c0 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
257d0 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ere used to.** b
257e0 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f  e a separate OP_
257f0 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f  VRowid opcode fo
25800 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75  r use with virtu
25810 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74  al tables, but t
25820 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64  his.** one opcod
25830 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20  e now works for 
25840 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73  both table types
25850 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
25860 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
25870 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
25880 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
25890 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71  C;.  i64 v;.  sq
258a0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
258b0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
258c0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
258d0 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75  le;..  pOut = ou
258e0 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
258f0 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  pOp);.  assert( 
25900 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25910 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25920 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
25930 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
25940 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
25950 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
25960 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
25970 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20   || pC->nullRow 
25980 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  );.  if( pC->nul
25990 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74  lRow ){.    pOut
259a0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
259b0 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ll;.    break;. 
259c0 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64   }else if( pC->d
259d0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b  eferredMoveto ){
259e0 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76  .    v = pC->mov
259f0 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64  etoTarget;.#ifnd
25a00 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
25a10 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65  IRTUALTABLE.  }e
25a20 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 56 74 61  lse if( pC->pVta
25a30 62 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 70  bCursor ){.    p
25a40 56 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62  Vtab = pC->pVtab
25a50 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
25a60 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74     pModule = pVt
25a70 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20  ab->pModule;.   
25a80 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
25a90 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20  ->xRowid );.    
25aa0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  rc = pModule->xR
25ab0 6f 77 69 64 28 70 43 2d 3e 70 56 74 61 62 43 75  owid(pC->pVtabCu
25ac0 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 73  rsor, &v);.    s
25ad0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
25ae0 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
25af0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
25b00 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
25b10 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  ABLE */.  }else{
25b20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
25b30 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
25b40 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
25b50 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
25b60 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
25b70 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
25b80 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
25b90 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
25ba0 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  ){.      pOut->f
25bb0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
25bc0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
25bd0 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
25be0 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
25bf0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76  (pC->pCursor, &v
25c00 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
25c10 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
25c20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65   /* Always so be
25c30 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 52  cause of CursorR
25c40 65 73 74 6f 72 65 28 29 20 61 62 6f 76 65 20 2a  estore() above *
25c50 2f 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  /.  }.  pOut->u.
25c60 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
25c70 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
25c80 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a  llRow P1 * * * *
25c90 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
25ca0 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e  cursor P1 to a n
25cb0 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50  ull row.  Any OP
25cc0 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f  _Column operatio
25cd0 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72  ns.** that occur
25ce0 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f   while the curso
25cf0 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c  r is on the null
25d00 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73   row will always
25d10 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c  .** write a NULL
25d20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
25d30 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75  lRow: {.  VdbeCu
25d40 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
25d50 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
25d60 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
25d70 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
25d80 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
25d90 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
25da0 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  =0 );.  pC->null
25db0 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63  Row = 1;.  pC->c
25dc0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
25dd0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
25de0 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20  pC->pCursor ){. 
25df0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
25e00 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70  learCursor(pC->p
25e10 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62  Cursor);.  }.  b
25e20 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
25e30 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 50  de: Last P1 P2 P
25e40 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3 * *.**.** The 
25e50 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
25e60 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
25e70 6f 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74  or Prev instruct
25e80 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
25e90 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
25ea0 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
25eb0 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
25ec0 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
25ed0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
25ee0 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
25ef0 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
25f00 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
25f10 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
25f20 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
25f30 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
25f40 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
25f50 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
25f60 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
25f70 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
25f80 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
25f90 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
25fa0 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
25fb0 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
25fc0 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
25fd0 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
25fe0 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
25ff0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
26000 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
26010 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
26020 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61   not Next..*/.ca
26030 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20  se OP_Last: {   
26040 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
26050 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
26060 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
26070 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
26080 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26090 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
260a0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
260b0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
260c0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
260d0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
260e0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
260f0 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  r;.  res = 0;.  
26100 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
26110 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
26120 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73  e3BtreeLast(pCrs
26130 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e  r, &res);.  pC->
26140 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
26150 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
26160 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
26170 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
26180 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
26190 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
261a0 20 70 4f 70 2d 3e 70 33 3b 0a 23 69 66 64 65 66   pOp->p3;.#ifdef
261b0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
261c0 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f  pC->seekOp = OP_
261d0 4c 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69  Last;.#endif.  i
261e0 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a  f( pOp->p2>0 ){.
261f0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
26200 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
26210 20 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74     if( res ) got
26220 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
26230 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
26240 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
26250 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
26260 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
26270 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
26280 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
26290 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
262a0 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
262b0 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
262c0 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
262d0 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
262e0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
262f0 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
26300 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
26310 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
26320 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
26330 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
26340 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
26350 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
26360 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
26370 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
26380 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
26390 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
263a0 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
263b0 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
263c0 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
263d0 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
263e0 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
263f0 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
26400 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
26410 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
26420 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
26430 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
26440 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
26450 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
26460 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20  P_SorterSort:   
26470 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
26480 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
26490 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
264a0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
264b0 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
264c0 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
264d0 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
264e0 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61  -;.#endif.  p->a
264f0 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
26500 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b  TMTSTATUS_SORT]+
26510 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
26520 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
26530 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
26540 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
26550 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
26560 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
26570 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
26580 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
26590 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
265a0 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
265b0 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
265c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
265d0 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
265e0 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
265f0 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c   index is empty,
26600 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
26610 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74  y to P2..** If t
26620 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
26630 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
26640 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
26650 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a  the following .*
26660 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
26670 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
26680 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
26690 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
266a0 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
266b0 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
266c0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
266d0 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
266e0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
266f0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
26700 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
26710 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
26720 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77  ..*/.case OP_Rew
26730 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ind: {        /*
26740 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
26750 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
26760 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
26770 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
26780 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
26790 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
267a0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
267b0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
267c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
267d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
267e0 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f  sSorter(pC)==(pO
267f0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
26800 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72  rterSort) );.  r
26810 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53  es = 1;.#ifdef S
26820 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
26830 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65  ->seekOp = OP_Re
26840 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69  wind;.#endif.  i
26850 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
26860 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
26870 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77  te3VdbeSorterRew
26880 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20  ind(pC, &res);. 
26890 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73   }else{.    pCrs
268a0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
268b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72  .    assert( pCr
268c0 73 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  sr );.    rc = s
268d0 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74  qlite3BtreeFirst
268e0 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
268f0 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
26900 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
26910 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
26920 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
26930 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
26940 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73  = (u8)res;.  ass
26950 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
26960 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
26970 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
26980 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
26990 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
269a0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
269b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
269c0 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20  ode: Next P1 P2 
269d0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41  P3 P4 P5.**.** A
269e0 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
269f0 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
26a00 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
26a10 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
26a20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
26a30 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
26a40 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
26a50 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
26a60 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
26a70 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
26a80 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
26a90 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
26aa0 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
26ab0 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
26ac0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
26ad0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
26ae0 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f  Next opcode is o
26af0 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77  nly valid follow
26b00 69 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53  ing an SeekGT, S
26b10 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f  eekGE, or.** OP_
26b20 52 65 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73  Rewind opcode us
26b30 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74  ed to position t
26b40 68 65 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74  he cursor.  Next
26b50 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a   is not allowed.
26b60 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65  ** to follow See
26b70 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20  kLT, SeekLE, or 
26b80 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54  OP_Last..**.** T
26b90 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
26ba0 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
26bb0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
26bc0 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d  udo-table.  P1 m
26bd0 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e  ust have.** been
26be0 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f   opened prior to
26bf0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20   this opcode or 
26c00 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c  the program will
26c10 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a   segfault..**.**
26c20 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
26c30 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
26c40 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
26c50 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
26c60 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
26c70 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
26c80 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
26c90 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
26ca0 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
26cb0 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
26cc0 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
26cd0 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
26ce0 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
26cf0 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
26d00 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
26d10 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
26d20 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
26d30 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
26d40 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
26d50 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
26d60 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
26d70 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
26d80 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
26d90 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
26da0 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
26db0 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
26dc0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
26dd0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
26de0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72  .** See also: Pr
26df0 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a  ev, NextIfOpen.*
26e00 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  /./* Opcode: Nex
26e10 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  tIfOpen P1 P2 P3
26e20 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
26e30 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
26e40 75 73 74 20 6c 69 6b 65 20 4e 65 78 74 20 65 78  ust like Next ex
26e50 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72  cept that if cur
26e60 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a  sor P1 is not.**
26e70 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73   open it behaves
26e80 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20   a no-op..*/./* 
26e90 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20  Opcode: Prev P1 
26ea0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
26eb0 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72  * Back up cursor
26ec0 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
26ed0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65  oints to the pre
26ee0 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70  vious key/data p
26ef0 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
26f00 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
26f10 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72  f there is no pr
26f20 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65  evious key/value
26f30 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
26f40 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
26f50 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
26f60 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
26f70 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63  f the cursor bac
26f80 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66  kup was successf
26f90 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
26fa0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
26fb0 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76  *.**.** The Prev
26fc0 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
26fd0 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  valid following 
26fe0 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  an SeekLT, SeekL
26ff0 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74  E, or.** OP_Last
27000 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
27010 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
27020 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f  sor.  Prev is no
27030 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
27040 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53  follow SeekGT, S
27050 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77  eekGE, or OP_Rew
27060 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ind..**.** The P
27070 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
27080 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
27090 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
270a0 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73  table.  If P1 is
270b0 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65  .** not open the
270c0 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
270d0 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
270e0 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  ** The P3 value 
270f0 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
27100 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74   btree implement
27110 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c  ation. If P3==1,
27120 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50   that.** means P
27130 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  1 is an SQL inde
27140 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20  x and that this 
27150 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c  instruction coul
27160 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f  d have been.** o
27170 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69  mitted if that i
27180 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e  ndex had been un
27190 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75  ique.  P3 is usu
271a0 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a  ally 0.  P3 is.*
271b0 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20  * always either 
271c0 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  0 or 1..**.** P4
271d0 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
271e0 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
271f0 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
27200 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
27210 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
27220 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  vious()..**.** I
27230 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
27240 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
27250 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
27260 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
27270 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
27280 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
27290 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
272a0 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ed..*/./* Opcode
272b0 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20  : PrevIfOpen P1 
272c0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
272d0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
272e0 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 50 72  rks just like Pr
272f0 65 76 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ev except that i
27300 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e  f cursor P1 is n
27310 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65  ot.** open it be
27320 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  haves a no-op..*
27330 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
27340 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70  Next: {  /* jump
27350 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
27360 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
27370 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
27380 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
27390 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
273a0 43 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b  C) );.  res = 0;
273b0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
273c0 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62  dbeSorterNext(db
273d0 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 67  , pC, &res);.  g
273e0 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63  oto next_tail;.c
273f0 61 73 65 20 4f 50 5f 50 72 65 76 49 66 4f 70 65  ase OP_PrevIfOpe
27400 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  n:    /* jump */
27410 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f  .case OP_NextIfO
27420 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20  pen:    /* jump 
27430 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73  */.  if( p->apCs
27440 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20  r[pOp->p1]==0 ) 
27450 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
27460 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65   through */.case
27470 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20   OP_Prev:       
27480 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
27490 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20  se OP_Next:     
274a0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
274b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
274c0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
274d0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
274e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
274f0 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f  ArraySize(p->aCo
27500 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d  unter) );.  pC =
27510 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
27520 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d  1];.  res = pOp-
27530 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p3;.  assert( p
27540 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
27550 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
27560 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
27570 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
27580 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 65   );.  assert( re
27590 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20  s==0 || (res==1 
275a0 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  && pC->isTable==
275b0 30 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  0) );.  testcase
275c0 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73  ( res==1 );.  as
275d0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
275e0 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f  e!=OP_Next || pO
275f0 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
27600 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
27610 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
27620 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
27630 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  ev || pOp->p4.xA
27640 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
27650 74 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a  treePrevious );.
27660 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
27670 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66  pcode!=OP_NextIf
27680 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Open || pOp->p4.
27690 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
276a0 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20  3BtreeNext );.  
276b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
276c0 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
276d0 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  en || pOp->p4.xA
276e0 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
276f0 74 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a  treePrevious);..
27700 20 20 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70    /* The Next op
27710 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
27720 64 20 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20  d after SeekGT, 
27730 53 65 65 6b 47 45 2c 20 61 6e 64 20 52 65 77 69  SeekGE, and Rewi
27740 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65  nd..  ** The Pre
27750 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  v opcode is only
27760 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b   used after Seek
27770 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20  LT, SeekLE, and 
27780 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72  Last. */.  asser
27790 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
277a0 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
277b0 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49  opcode!=OP_NextI
277c0 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
277d0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
277e0 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekGT || pC->see
277f0 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20  kOp==OP_SeekGE. 
27800 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
27810 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c  kOp==OP_Rewind |
27820 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
27830 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65 72  _Found);.  asser
27840 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
27850 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
27860 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49  opcode!=OP_PrevI
27870 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
27880 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
27890 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekLT || pC->see
278a0 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20  kOp==OP_SeekLE. 
278b0 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
278c0 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a  kOp==OP_Last );.
278d0 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  .  rc = pOp->p4.
278e0 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 70 43 75  xAdvance(pC->pCu
278f0 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78  rsor, &res);.nex
27900 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61  t_tail:.  pC->ca
27910 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
27920 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42  E_STALE;.  VdbeB
27930 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d  ranchTaken(res==
27940 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3d  0,2);.  if( res=
27950 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  =0 ){.    pC->nu
27960 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
27970 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e  ->aCounter[pOp->
27980 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51  p5]++;.#ifdef SQ
27990 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71  LITE_TEST.    sq
279a0 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
279b0 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20  nt++;.#endif.   
279c0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
279d0 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
279e0 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73  nterrupt;.  }els
279f0 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  e{.    pC->nullR
27a00 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f  ow = 1;.  }.  go
27a10 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
27a20 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
27a30 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20  code: IdxInsert 
27a40 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
27a50 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
27a60 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  [P2].**.** Regis
27a70 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20  ter P2 holds an 
27a80 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61  SQL index key ma
27a90 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  de using the.** 
27aa0 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
27ab0 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f  uctions.  This o
27ac0 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61  pcode writes tha
27ad0 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68  t key.** into th
27ae0 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74  e index P1.  Dat
27af0 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20  a for the entry 
27b00 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33  is nil..**.** P3
27b10 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20   is a flag that 
27b20 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20  provides a hint 
27b30 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61  to the b-tree la
27b40 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a  yer that this.**
27b50 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c   insert is likel
27b60 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
27b70 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  d..**.** If P5 h
27b80 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  as the OPFLAG_NC
27b90 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74  HANGE bit set, t
27ba0 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63  hen the change c
27bb0 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63  ounter is.** inc
27bc0 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73  remented by this
27bd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
27be0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
27bf0 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65 61  ANGE bit is clea
27c00 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
27c10 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
27c20 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a   unchanged..**.*
27c30 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
27c40 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
27c50 53 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74 68  SULT bit set, th
27c60 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75  en the cursor mu
27c70 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20  st have.** just 
27c80 64 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20 74  done a seek to t
27c90 68 65 20 73 70 6f 74 20 77 68 65 72 65 20 74 68  he spot where th
27ca0 65 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 74  e new entry is t
27cb0 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a  o be inserted..*
27cc0 2a 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f 69  * This flag avoi
27cd0 64 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74 72  ds doing an extr
27ce0 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68  a seek..**.** Th
27cf0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
27d00 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e  nly works for in
27d10 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69  dices.  The equi
27d20 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
27d30 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73  on.** for tables
27d40 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a   is OP_Insert..*
27d50 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
27d60 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a  Insert:       /*
27d70 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in2 */.case OP_
27d80 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
27d90 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
27da0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
27db0 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f    int nKey;.  co
27dc0 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a  nst char *zKey;.
27dd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27de0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27df0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
27e00 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
27e10 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
27e20 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
27e30 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
27e40 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  C)==(pOp->opcode
27e50 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
27e60 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  t) );.  pIn2 = &
27e70 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
27e80 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66   assert( pIn2->f
27e90 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
27ea0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  );.  if( pOp->p5
27eb0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
27ec0 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
27ed0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27ee0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
27ef0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
27f00 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  ble==0 );.  rc =
27f10 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
27f20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
27f30 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66  ITE_OK ){.    if
27f40 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
27f50 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29  P_SorterInsert )
27f60 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
27f70 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72  ite3VdbeSorterWr
27f80 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20  ite(pC, pIn2);. 
27f90 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
27fa0 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
27fb0 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e        zKey = pIn
27fc0 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d  2->z;.      rc =
27fd0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
27fe0 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ert(pC->pCursor,
27ff0 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c   zKey, nKey, "",
28000 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20   0, 0, pOp->p3, 
28010 0a 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70  .          ((pOp
28020 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
28030 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
28040 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
28050 30 29 0a 20 20 20 20 20 20 20 20 20 20 29 3b 0a  0).          );.
28060 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
28070 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
28080 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43 2d  ==0 );.      pC-
28090 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
280a0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
280b0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
280c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
280d0 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
280e0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
280f0 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a   key=r[P2@P3].**
28100 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  .** The content 
28110 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20  of P3 registers 
28120 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69  starting at regi
28130 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20  ster P2 form.** 
28140 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
28150 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f  x key. This opco
28160 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20  de removes that 
28170 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a  entry from the .
28180 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20  ** index opened 
28190 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f  by cursor P1..*/
281a0 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65  .case OP_IdxDele
281b0 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  te: {.  VdbeCurs
281c0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
281d0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
281e0 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
281f0 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
28200 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
28210 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28220 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
28230 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d  +pOp->p3<=(p->nM
28240 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
28250 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
28260 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
28270 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
28280 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
28290 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
282a0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
282b0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
282c0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
282d0 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73  pCrsr!=0 );.  as
282e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
282f0 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f   );.  r.pKeyInfo
28300 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
28310 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75  .  r.nField = (u
28320 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e  16)pOp->p3;.  r.
28330 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
28340 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
28350 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65  [pOp->p2];.#ifde
28360 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
28370 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
28380 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
28390 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
283a0 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
283b0 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
283c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
283d0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
283e0 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
283f0 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72  , &res);.  if( r
28400 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
28410 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  res==0 ){.    rc
28420 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
28430 65 6c 65 74 65 28 70 43 72 73 72 2c 20 30 29 3b  elete(pCrsr, 0);
28440 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
28450 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
28460 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61  o==0 );.  pC->ca
28470 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
28480 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b  E_STALE;.  break
28490 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
284a0 49 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a  IdxRowid P1 P2 *
284b0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
284c0 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
284d0 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
284e0 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
284f0 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
28500 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e  he last entry in
28510 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a   the record at.*
28520 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * the end of the
28530 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74   index key point
28540 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20  ed to by cursor 
28550 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65  P1.  This intege
28560 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74  r should be.** t
28570 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
28580 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77  table entry to w
28590 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20  hich this index 
285a0 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a  entry points..**
285b0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f  .** See also: Ro
285c0 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e  wid, MakeRecord.
285d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52  .*/.case OP_IdxR
285e0 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
285f0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
28600 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
28610 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  r;.  VdbeCursor 
28620 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77 69 64  *pC;.  i64 rowid
28630 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  ;..  pOut = out2
28640 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
28650 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p);.  assert( pO
28660 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
28670 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
28680 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
28690 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
286a0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
286b0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
286c0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
286d0 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 70 4f  pCrsr!=0 );.  pO
286e0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
286f0 4e 75 6c 6c 3b 0a 20 20 61 73 73 65 72 74 28 20  Null;.  assert( 
28700 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
28710 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
28720 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
28730 30 20 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69 74  0 );..  /* sqlit
28740 65 33 56 62 65 43 75 72 73 6f 72 52 65 73 74 6f  e3VbeCursorResto
28750 72 65 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66 61  re() can only fa
28760 69 6c 20 69 66 20 74 68 65 20 72 65 63 6f 72 64  il if the record
28770 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65   has been delete
28780 64 0a 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d 20  d.  ** out from 
28790 75 6e 64 65 72 20 74 68 65 20 63 75 72 73 6f 72  under the cursor
287a0 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 6e 65 76  .  That will nev
287b0 65 72 20 68 61 70 70 65 6e 64 20 66 6f 72 20 61  er happend for a
287c0 6e 20 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a 20  n IdxRowid.  ** 
287d0 6f 70 63 6f 64 65 2c 20 68 65 6e 63 65 20 74 68  opcode, hence th
287e0 65 20 4e 45 56 45 52 28 29 20 61 72 72 6f 75 6e  e NEVER() arroun
287f0 64 20 74 68 65 20 63 68 65 63 6b 20 6f 66 20 74  d the check of t
28800 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e  he return value.
28810 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  .  */.  rc = sql
28820 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65  ite3VdbeCursorRe
28830 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 69 66 28  store(pC);.  if(
28840 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
28850 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
28860 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
28870 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c  ..  if( !pC->nul
28880 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69  lRow ){.    rowi
28890 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  d = 0;  /* Not n
288a0 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
288b0 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
288c0 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72  arning. */.    r
288d0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
288e0 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73  dxRowid(db, pCrs
288f0 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20  r, &rowid);.    
28900 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
28910 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
28920 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
28930 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  or;.    }.    pO
28940 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b  ut->u.i = rowid;
28950 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
28960 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a   = MEM_Int;.  }.
28970 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28980 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20  pcode: IdxGE P1 
28990 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
289a0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
289b0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
289c0 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
289d0 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
289e0 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
289f0 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
28a00 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
28a10 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20  he PRIMARY KEY. 
28a20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
28a30 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20  y value against 
28a40 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68  the index .** th
28a50 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
28a60 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
28a70 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
28a80 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
28a90 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20  D .** fields at 
28aa0 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49  the end..**.** I
28ab0 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
28ac0 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20  ntry is greater 
28ad0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
28ae0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a   the key value.*
28af0 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  * then jump to P
28b00 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61  2.  Otherwise fa
28b10 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
28b20 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
28b30 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
28b40 3a 20 49 64 78 47 54 20 50 31 20 50 32 20 50 33  : IdxGT P1 P2 P3
28b50 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
28b60 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
28b70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
28b80 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
28b90 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
28ba0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
28bb0 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
28bc0 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
28bd0 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70  IMARY KEY.  Comp
28be0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
28bf0 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
28c00 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
28c10 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
28c20 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
28c30 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
28c40 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a  KEY or ROWID .**
28c50 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
28c60 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nd..**.** If the
28c70 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
28c80 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
28c90 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a  the key value.**
28ca0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
28cb0 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  .  Otherwise fal
28cc0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
28cd0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
28ce0 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
28cf0 20 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20   IdxLT P1 P2 P3 
28d00 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
28d10 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
28d20 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
28d30 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
28d40 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
28d50 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
28d60 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
28d70 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
28d80 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
28d90 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
28da0 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
28db0 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  st.** the index 
28dc0 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
28dd0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
28de0 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
28df0 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a  RIMARY KEY or.**
28e00 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
28e10 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
28e20 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
28e30 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  try is less than
28e40 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74   the key value t
28e50 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
28e60 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  ** Otherwise fal
28e70 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
28e80 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
28e90 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
28ea0 20 49 64 78 4c 45 20 50 31 20 50 32 20 50 33 20   IdxLE P1 P2 P3 
28eb0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
28ec0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
28ed0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
28ee0 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
28ef0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
28f00 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
28f10 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
28f20 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
28f30 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
28f40 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
28f50 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
28f60 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  st.** the index 
28f70 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
28f80 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
28f90 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
28fa0 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a  RIMARY KEY or.**
28fb0 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
28fc0 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
28fd0 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
28fe0 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  try is less than
28ff0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
29000 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20   key value then 
29010 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f  jump.** to P2. O
29020 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
29030 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
29040 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
29050 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a  /.case OP_IdxLE:
29060 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
29070 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  p */.case OP_Idx
29080 47 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  GT:          /* 
29090 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
290a0 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20  IdxLT:          
290b0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
290c0 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20  OP_IdxGE:  {    
290d0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
290e0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
290f0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
29100 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a  ackedRecord r;..
29110 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
29120 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
29130 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
29140 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
29150 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
29160 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
29170 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72  ert( pC->isOrder
29180 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
29190 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 3b  pC->pCursor!=0);
291a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
291b0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
291c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
291d0 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
291e0 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65  >p5==1 );.  asse
291f0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
29200 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 72  =P4_INT32 );.  r
29210 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
29220 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46  pKeyInfo;.  r.nF
29230 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
29240 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f 70  >p4.i;.  if( pOp
29250 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78 4c  ->opcode<OP_IdxL
29260 54 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  T ){.    assert(
29270 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
29280 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxLE || pOp->o
29290 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
292a0 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74  );.    r.default
292b0 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73  _rc = -1;.  }els
292c0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
292d0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
292e0 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxGE || pOp->opc
292f0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b  ode==OP_IdxLT );
29300 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  .    r.default_r
29310 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e 61  c = 0;.  }.  r.a
29320 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
29330 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
29340 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e  ITE_DEBUG.  { in
29350 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
29360 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
29370 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
29380 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
29390 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 73 20   }.#endif.  res 
293a0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
293b0 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
293c0 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
293d0 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20  ning. */.  rc = 
293e0 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65  sqlite3VdbeIdxKe
293f0 79 43 6f 6d 70 61 72 65 28 64 62 2c 20 70 43 2c  yCompare(db, pC,
29400 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 61 73   &r, &res);.  as
29410 73 65 72 74 28 20 28 4f 50 5f 49 64 78 4c 45 26  sert( (OP_IdxLE&
29420 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29  1)==(OP_IdxLT&1)
29430 20 26 26 20 28 4f 50 5f 49 64 78 47 45 26 31 29   && (OP_IdxGE&1)
29440 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31 29 20 29  ==(OP_IdxGT&1) )
29450 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70  ;.  if( (pOp->op
29460 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78  code&1)==(OP_Idx
29470 4c 54 26 31 29 20 29 7b 0a 20 20 20 20 61 73 73  LT&1) ){.    ass
29480 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
29490 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f  ==OP_IdxLE || pO
294a0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
294b0 78 4c 54 20 29 3b 0a 20 20 20 20 72 65 73 20 3d  xLT );.    res =
294c0 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a   -res;.  }else{.
294d0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
294e0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
294f0 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
29500 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
29510 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56    res++;.  }.  V
29520 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
29530 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  es>0,2);.  if( r
29540 65 73 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  es>0 ) goto jump
29550 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
29560 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
29570 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20  estroy P1 P2 P3 
29580 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
29590 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62   an entire datab
295a0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
295b0 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
295c0 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ge in the databa
295d0 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69  se.** file is gi
295e0 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a  ven by P1..**.**
295f0 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
29600 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e   destroyed is in
29610 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
29620 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30  se file if P3==0
29630 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74  .  If.** P3==1 t
29640 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f  hen the table to
29650 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20   be clear is in 
29660 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
29670 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74  tabase file.** t
29680 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  hat is used to s
29690 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61  tore tables crea
296a0 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  te using CREATE 
296b0 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e  TEMPORARY TABLE.
296c0 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  .**.** If AUTOVA
296d0 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20  CUUM is enabled 
296e0 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69  then it is possi
296f0 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72  ble that another
29700 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69   root page.** mi
29710 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74  ght be moved int
29720 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65  o the newly dele
29730 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ted root page in
29740 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61   order to keep a
29750 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73  ll.** root pages
29760 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74   contiguous at t
29770 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
29780 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
29790 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c  he former.** val
297a0 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70  ue of the root p
297b0 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d  age that moved -
297c0 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72   its value befor
297d0 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72  e the move occur
297e0 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72  red -.** is stor
297f0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
29800 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a  2.  If no page .
29810 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20  ** movement was 
29820 72 65 71 75 69 72 65 64 20 28 62 65 63 61 75 73  required (becaus
29830 65 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  e the table bein
29840 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c  g dropped was al
29850 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61  ready .** the la
29860 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61  st one in the da
29870 74 61 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a  tabase) then a z
29880 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ero is stored in
29890 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
298a0 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
298b0 73 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20  s disabled then 
298c0 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
298d0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
298e0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
298f0 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f   Clear.*/.case O
29900 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20  P_Destroy: {    
29910 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e   /* out2 */.  in
29920 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20  t iMoved;.  int 
29930 69 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  iDb;..  assert( 
29940 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
29950 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
29960 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
29970 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
29980 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69   = MEM_Null;.  i
29990 66 28 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64  f( db->nVdbeRead
299a0 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79   > db->nVDestroy
299b0 2b 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  +1 ){.    rc = S
299c0 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20  QLITE_LOCKED;.  
299d0 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
299e0 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d   = OE_Abort;.  }
299f0 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20  else{.    iDb = 
29a00 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73  pOp->p3;.    ass
29a10 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
29a20 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
29a30 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64  b) );.    iMoved
29a40 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
29a50 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73  eded.  Only to s
29a60 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
29a70 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  . */.    rc = sq
29a80 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61  lite3BtreeDropTa
29a90 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  ble(db->aDb[iDb]
29aa0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26  .pBt, pOp->p1, &
29ab0 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75  iMoved);.    pOu
29ac0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
29ad0 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
29ae0 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e  i = iMoved;.#ifn
29af0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29b00 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69  AUTOVACUUM.    i
29b10 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
29b20 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b   && iMoved!=0 ){
29b30 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
29b40 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20  otPageMoved(db, 
29b50 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70  iDb, iMoved, pOp
29b60 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20  ->p1);.      /* 
29b70 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f  All OP_Destroy o
29b80 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20  perations occur 
29b90 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65  on the same btre
29ba0 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  e */.      asser
29bb0 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  t( resetSchemaOn
29bc0 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65  Fault==0 || rese
29bd0 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d  tSchemaOnFault==
29be0 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72  iDb+1 );.      r
29bf0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
29c00 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d  t = iDb+1;.    }
29c10 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
29c20 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
29c30 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50  e: Clear P1 P2 P
29c40 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  3.**.** Delete a
29c50 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  ll contents of t
29c60 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
29c70 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
29c80 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e   root page.** in
29c90 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
29ca0 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
29cb0 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20  1.  But, unlike 
29cc0 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a  Destroy, do not.
29cd0 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61  ** remove the ta
29ce0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f  ble or index fro
29cf0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
29d00 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74  ile..**.** The t
29d10 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
29d20 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
29d30 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
29d40 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P2==0.  If.** P
29d50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  2==1 then the ta
29d60 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
29d70 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
29d80 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
29d90 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
29da0 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
29db0 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
29dc0 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
29dd0 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
29de0 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  the P3 value is 
29df0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
29e00 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65  he table referre
29e10 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a  d to must be an.
29e20 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20  ** intkey table 
29e30 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e  (an SQL table, n
29e40 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e  ot an index). In
29e50 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72   this case the r
29e60 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f  ow change .** co
29e70 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  unt is increment
29e80 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
29e90 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
29ea0 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
29eb0 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69  red. .** If P3 i
29ec0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
29ed0 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ero, then the va
29ee0 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lue stored in re
29ef0 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20  gister P3 is.** 
29f00 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64  also incremented
29f10 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
29f20 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
29f30 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
29f40 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
29f50 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61  o: Destroy.*/.ca
29f60 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20  se OP_Clear: {. 
29f70 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a   int nChange;. .
29f80 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20    nChange = 0;. 
29f90 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
29fa0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73  Only==0 );.  ass
29fb0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
29fc0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
29fd0 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d  p->p2) );.  rc =
29fe0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
29ff0 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64  arTable(.      d
2a000 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e  b->aDb[pOp->p2].
2a010 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70  pBt, pOp->p1, (p
2a020 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67  Op->p3 ? &nChang
2a030 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66  e : 0).  );.  if
2a040 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
2a050 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e   p->nChange += n
2a060 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20  Change;.    if( 
2a070 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
2a080 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
2a090 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
2a0a0 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d  >p3]) );.      m
2a0b0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
2a0c0 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  p, &aMem[pOp->p3
2a0d0 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70  ]);.      aMem[p
2a0e0 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e  Op->p3].u.i += n
2a0f0 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20  Change;.    }.  
2a100 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2a110 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53 6f   Opcode: ResetSo
2a120 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  rter P1 * * * *.
2a130 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
2a140 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74   contents from t
2a150 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
2a160 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20  le or sorter.** 
2a170 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20  that is open on 
2a180 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  cursor P1..**.**
2a190 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c   This opcode onl
2a1a0 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72 73  y works for curs
2a1b0 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f 72  ors used for sor
2a1c0 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e  ting and.** open
2a1d0 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45  ed with OP_OpenE
2a1e0 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53  phemeral or OP_S
2a1f0 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61  orterOpen..*/.ca
2a200 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74 65  se OP_ResetSorte
2a210 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  r: {.  VdbeCurso
2a220 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65 72  r *pC;. .  asser
2a230 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2a240 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2a250 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2a260 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2a270 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2a280 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 53   );.  if( pC->pS
2a290 6f 72 74 65 72 20 29 7b 0a 20 20 20 20 73 71 6c  orter ){.    sql
2a2a0 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65  ite3VdbeSorterRe
2a2b0 73 65 74 28 64 62 2c 20 70 43 2d 3e 70 53 6f 72  set(db, pC->pSor
2a2c0 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ter);.  }else{. 
2a2d0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
2a2e0 73 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20  sEphemeral );.  
2a2f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2a300 72 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43  reeClearTableOfC
2a310 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f  ursor(pC->pCurso
2a320 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  r);.  }.  break;
2a330 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
2a340 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50 32  reateTable P1 P2
2a350 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2a360 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69  is: r[P2]=root i
2a370 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  Db=P1.**.** Allo
2a380 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65  cate a new table
2a390 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
2a3a0 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
2a3b0 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  ==0 or in the.**
2a3c0 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2a3d0 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
2a3e0 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63  1 or in an attac
2a3f0 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a  hed database if.
2a400 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20  ** P1>1.  Write 
2a410 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  the root page nu
2a420 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
2a430 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  table into.** re
2a440 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
2a450 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62  The difference b
2a460 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61  etween a table a
2a470 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74  nd an index is t
2a480 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75  his:  A table mu
2a490 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62  st.** have a 4-b
2a4a0 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20  yte integer key 
2a4b0 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72 62  and can have arb
2a4c0 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e  itrary data.  An
2a4d0 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e   index.** has an
2a4e0 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20 62   arbitrary key b
2a4f0 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a  ut no data..**.*
2a500 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61  * See also: Crea
2a510 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70  teIndex.*/./* Op
2a520 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65  code: CreateInde
2a530 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
2a540 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
2a550 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a  =root iDb=P1.**.
2a560 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
2a570 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d  w index in the m
2a580 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2a590 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
2a5a0 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
2a5b0 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
2a5c0 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
2a5d0 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
2a5e0 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
2a5f0 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
2a600 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
2a610 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
2a620 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
2a630 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75  ..**.** See docu
2a640 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f  mentation on OP_
2a650 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20  CreateTable for 
2a660 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
2a670 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
2a680 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20  OP_CreateIndex: 
2a690 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
2a6a0 74 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  t2 */.case OP_Cr
2a6b0 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20  eateTable: {    
2a6c0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
2a6d0 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69  .  int pgno;.  i
2a6e0 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a  nt flags;.  Db *
2a6f0 70 44 62 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  pDb;..  pOut = o
2a700 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2a710 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d 20   pOp);.  pgno = 
2a720 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
2a730 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2a740 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2a750 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
2a760 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
2a770 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
2a780 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2a790 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ly==0 );.  pDb =
2a7a0 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
2a7b0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
2a7c0 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69  b->pBt!=0 );.  i
2a7d0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
2a7e0 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29  OP_CreateTable )
2a7f0 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d  {.    /* flags =
2a800 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a   BTREE_INTKEY; *
2a810 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  /.    flags = BT
2a820 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65  REE_INTKEY;.  }e
2a830 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d  lse{.    flags =
2a840 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a   BTREE_BLOBKEY;.
2a850 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
2a860 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
2a870 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67  le(pDb->pBt, &pg
2a880 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f  no, flags);.  pO
2a890 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a  ut->u.i = pgno;.
2a8a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2a8b0 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65  pcode: ParseSche
2a8c0 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ma P1 * * P4 *.*
2a8d0 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61  *.** Read and pa
2a8e0 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  rse all entries 
2a8f0 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f  from the SQLITE_
2a900 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20  MASTER table of 
2a910 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74  database P1.** t
2a920 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48  hat match the WH
2a930 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a  ERE clause P4. .
2a940 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2a950 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61  e invokes the pa
2a960 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rser to create a
2a970 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
2a980 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75  hine,.** then ru
2a990 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  ns the new virtu
2a9a0 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20  al machine.  It 
2a9b0 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74  is thus a re-ent
2a9c0 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  rant opcode..*/.
2a9d0 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68  case OP_ParseSch
2a9e0 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62  ema: {.  int iDb
2a9f0 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
2aa00 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20  zMaster;.  char 
2aa10 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74  *zSql;.  InitDat
2aa20 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f  a initData;..  /
2aa30 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20 73  * Any prepared s
2aa40 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e  tatement that in
2aa50 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64  vokes this opcod
2aa60 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65  e will hold mute
2aa70 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72  xes.  ** on ever
2aa80 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69  y btree.  This i
2aa90 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74 65  s a prerequisite
2aaa0 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20   for invoking . 
2aab0 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43   ** sqlite3InitC
2aac0 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a  allback()..  */.
2aad0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2aae0 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b  BUG.  for(iDb=0;
2aaf0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44   iDb<db->nDb; iD
2ab00 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b++){.    assert
2ab10 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69  ( iDb==1 || sqli
2ab20 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74  te3BtreeHoldsMut
2ab30 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ex(db->aDb[iDb].
2ab40 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  pBt) );.  }.#end
2ab50 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  if..  iDb = pOp-
2ab60 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
2ab70 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
2ab80 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2ab90 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  ( DbHasProperty(
2aba0 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65  db, iDb, DB_Sche
2abb0 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f  maLoaded) );.  /
2abc0 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61 20 63  * Used to be a c
2abd0 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a  onditional */ {.
2abe0 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43      zMaster = SC
2abf0 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b  HEMA_TABLE(iDb);
2ac00 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62  .    initData.db
2ac10 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44   = db;.    initD
2ac20 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ata.iDb = pOp->p
2ac30 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  1;.    initData.
2ac40 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a  pzErrMsg = &p->z
2ac50 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c  ErrMsg;.    zSql
2ac60 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
2ac70 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45  f(db,.       "SE
2ac80 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70  LECT name, rootp
2ac90 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25  age, sql FROM '%
2aca0 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f  q'.%s WHERE %s O
2acb0 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a  RDER BY rowid",.
2acc0 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69         db->aDb[i
2acd0 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74  Db].zName, zMast
2ace0 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  er, pOp->p4.z);.
2acf0 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20      if( zSql==0 
2ad00 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
2ad10 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20  LITE_NOMEM;.    
2ad20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
2ad30 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75  ert( db->init.bu
2ad40 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64  sy==0 );.      d
2ad50 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31  b->init.busy = 1
2ad60 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74 61  ;.      initData
2ad70 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  .rc = SQLITE_OK;
2ad80 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21  .      assert( !
2ad90 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
2ada0 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
2adb0 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20  qlite3_exec(db, 
2adc0 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69  zSql, sqlite3Ini
2add0 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74  tCallback, &init
2ade0 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20  Data, 0);.      
2adf0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2ae00 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74  K ) rc = initDat
2ae10 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69  a.rc;.      sqli
2ae20 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53  te3DbFree(db, zS
2ae30 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  ql);.      db->i
2ae40 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20  nit.busy = 0;.  
2ae50 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
2ae60 20 29 20 73 71 6c 69 74 65 33 52 65 73 65 74 41   ) sqlite3ResetA
2ae70 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
2ae80 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 69 66 28  ction(db);.  if(
2ae90 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45   rc==SQLITE_NOME
2aea0 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  M ){.    goto no
2aeb0 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _mem;.  }.  brea
2aec0 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66  k;  .}..#if !def
2aed0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2aee0 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63  _ANALYZE)./* Opc
2aef0 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69  ode: LoadAnalysi
2af00 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  s P1 * * * *.**.
2af10 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c 69  ** Read the sqli
2af20 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66  te_stat1 table f
2af30 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 61  or database P1 a
2af40 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74  nd load the cont
2af50 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74  ent.** of that t
2af60 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e  able into the in
2af70 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73  ternal index has
2af80 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77  h table.  This w
2af90 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65  ill cause.** the
2afa0 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20   analysis to be 
2afb0 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61 72  used when prepar
2afc0 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65  ing all subseque
2afd0 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63  nt queries..*/.c
2afe0 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79  ase OP_LoadAnaly
2aff0 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  sis: {.  assert(
2b000 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2b010 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
2b020 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2b030 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c  AnalysisLoad(db,
2b040 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65   pOp->p1);.  bre
2b050 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f  ak;  .}.#endif /
2b060 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
2b070 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20  E_OMIT_ANALYZE) 
2b080 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  */../* Opcode: D
2b090 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20  ropTable P1 * * 
2b0a0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2b0b0 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2b0c0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2b0d0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2b0e0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2b0f0 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69  table named P4 i
2b100 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2b110 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
2b120 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20  fter a table.** 
2b130 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
2b140 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
2b150 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
2b160 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
2b170 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
2b180 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2b190 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2b1a0 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2b1b0 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2b1c0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2b1d0 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c  opTable: {.  sql
2b1e0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2b1f0 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70  eteTable(db, pOp
2b200 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
2b210 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2b220 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64   Opcode: DropInd
2b230 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ex P1 * * P4 *.*
2b240 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
2b250 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
2b260 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
2b270 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
2b280 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  be.** the index 
2b290 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
2b2a0 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
2b2b0 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
2b2c0 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72  n index.** is dr
2b2d0 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
2b2e0 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
2b2f0 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e  oy opcode).** in
2b300 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
2b310 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
2b320 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2b330 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
2b340 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
2b350 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
2b360 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65  case OP_DropInde
2b370 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  x: {.  sqlite3Un
2b380 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
2b390 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  ex(db, pOp->p1, 
2b3a0 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
2b3b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2b3c0 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20 50  e: DropTrigger P
2b3d0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2b3e0 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
2b3f0 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
2b400 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
2b410 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
2b420 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61  * the trigger na
2b430 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
2b440 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
2b450 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
2b460 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f  rigger.** is dro
2b470 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28  pped from disk (
2b480 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f  using the Destro
2b490 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64  y opcode) in ord
2b4a0 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74  er to keep .** t
2b4b0 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
2b4c0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2b4d0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
2b4e0 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
2b4f0 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
2b500 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67  case OP_DropTrig
2b510 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ger: {.  sqlite3
2b520 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
2b530 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e  rigger(db, pOp->
2b540 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2b550 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
2b560 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2b570 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
2b580 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65  ./* Opcode: Inte
2b590 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33  grityCk P1 P2 P3
2b5a0 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61   * P5.**.** Do a
2b5b0 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68  n analysis of th
2b5c0 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  e currently open
2b5d0 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72   database.  Stor
2b5e0 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
2b5f0 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20   P1 the text of 
2b600 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
2b610 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20   describing any 
2b620 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20  problems..** If 
2b630 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20  no problems are 
2b640 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e  found, store a N
2b650 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20  ULL in register 
2b660 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  P1..**.** The re
2b670 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
2b680 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  ns the maximum n
2b690 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64  umber of allowed
2b6a0 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d   errors..** At m
2b6b0 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72 6f  ost reg(P3) erro
2b6c0 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72  rs will be repor
2b6d0 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ted..** In other
2b6e0 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c   words, the anal
2b6f0 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f  ysis stops as so
2b700 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65 72  on as reg(P1) er
2b710 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65  rors are .** see
2b720 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20 75  n.  Reg(P1) is u
2b730 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
2b740 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  number of errors
2b750 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a   remaining..**.*
2b760 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20  * The root page 
2b770 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74  numbers of all t
2b780 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74  ables in the dat
2b790 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65  abase are intege
2b7a0 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72  r.** stored in r
2b7b0 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31  eg(P1), reg(P1+1
2b7c0 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e  ), reg(P1+2), ..
2b7d0 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20 50 32  ..  There are P2
2b7e0 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c   tables.** total
2b7f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
2b800 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63   not zero, the c
2b810 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20  heck is done on 
2b820 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
2b830 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20  tabase.** file, 
2b840 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74  not the main dat
2b850 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
2b860 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
2b870 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
2b880 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  nt the integrity
2b890 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a  _check pragma..*
2b8a0 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72  /.case OP_Integr
2b8b0 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e  ityCk: {.  int n
2b8c0 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75  Root;      /* Nu
2b8d0 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74  mber of tables t
2b8e0 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65  o check.  (Numbe
2b8f0 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e  r of root pages.
2b900 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f  ) */.  int *aRoo
2b910 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  t;     /* Array 
2b920 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62  of rootpage numb
2b930 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74  ers for tables t
2b940 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a  o be checked */.
2b950 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20    int j;        
2b960 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
2b970 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  r */.  int nErr;
2b980 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
2b990 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72   of errors repor
2b9a0 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ted */.  char *z
2b9b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74  ;        /* Text
2b9c0 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65   of the error re
2b9d0 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  port */.  Mem *p
2b9e0 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67  nErr;     /* Reg
2b9f0 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72  ister keeping tr
2ba00 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ack of errors re
2ba10 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73  maining */..  as
2ba20 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
2ba30 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20  er );.  nRoot = 
2ba40 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
2ba50 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20  t( nRoot>0 );.  
2ba60 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44  aRoot = sqlite3D
2ba70 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
2ba80 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f  izeof(int)*(nRoo
2ba90 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52  t+1) );.  if( aR
2baa0 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  oot==0 ) goto no
2bab0 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  _mem;.  assert( 
2bac0 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
2bad0 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
2bae0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
2baf0 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f  pnErr = &aMem[pO
2bb00 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
2bb10 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
2bb20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
2bb30 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
2bb40 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  r->flags & (MEM_
2bb50 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
2bb60 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
2bb70 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2bb80 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74  for(j=0; j<nRoot
2bb90 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f  ; j++){.    aRoo
2bba0 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69  t[j] = (int)sqli
2bbb0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
2bbc0 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20  &pIn1[j]);.  }. 
2bbd0 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20   aRoot[j] = 0;. 
2bbe0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
2bbf0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2bc00 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2bc10 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2bc20 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d  Op->p5) );.  z =
2bc30 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
2bc40 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e  egrityCheck(db->
2bc50 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74  aDb[pOp->p5].pBt
2bc60 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a  , aRoot, nRoot,.
2bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc90 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69   (int)pnErr->u.i
2bca0 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69  , &nErr);.  sqli
2bcb0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61 52  te3DbFree(db, aR
2bcc0 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75  oot);.  pnErr->u
2bcd0 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71  .i -= nErr;.  sq
2bce0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
2bcf0 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28  ull(pIn1);.  if(
2bd00 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20   nErr==0 ){.    
2bd10 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a  assert( z==0 );.
2bd20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30    }else if( z==0
2bd30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
2bd40 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  mem;.  }else{.  
2bd50 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2bd60 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20  SetStr(pIn1, z, 
2bd70 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
2bd80 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a   sqlite3_free);.
2bd90 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58    }.  UPDATE_MAX
2bda0 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
2bdb0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2bdc0 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e  angeEncoding(pIn
2bdd0 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
2bde0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2bdf0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  /* SQLITE_OMIT_I
2be00 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a  NTEGRITY_CHECK *
2be10 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  /../* Opcode: Ro
2be20 77 53 65 74 41 64 64 20 50 31 20 50 32 20 2a 20  wSetAdd P1 P2 * 
2be30 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2be40 20 20 72 6f 77 73 65 74 28 50 31 29 3d 72 5b 50    rowset(P1)=r[P
2be50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20  2].**.** Insert 
2be60 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
2be70 65 20 68 65 6c 64 20 62 79 20 72 65 67 69 73 74  e held by regist
2be80 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f  er P2 into a boo
2be90 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65  lean index.** he
2bea0 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ld in register P
2beb0 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65  1..**.** An asse
2bec0 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50  rtion fails if P
2bed0 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  2 is not an inte
2bee0 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
2bef0 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20  RowSetAdd: {    
2bf00 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a     /* in1, in2 *
2bf10 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2bf20 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
2bf30 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
2bf40 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  2];.  assert( (p
2bf50 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
2bf60 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66  _Int)!=0 );.  if
2bf70 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2bf80 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2bf90 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2bfa0 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
2bfb0 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70  In1);.    if( (p
2bfc0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2bfd0 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f  _RowSet)==0 ) go
2bfe0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
2bff0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
2c000 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  sert(pIn1->u.pRo
2c010 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29  wSet, pIn2->u.i)
2c020 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2c030 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52   Opcode: RowSetR
2c040 65 61 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ead P1 P2 P3 * *
2c050 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
2c060 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a  [P3]=rowset(P1).
2c070 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68  **.** Extract th
2c080 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
2c090 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e   from boolean in
2c0a0 64 65 78 20 50 31 20 61 6e 64 20 70 75 74 20 74  dex P1 and put t
2c0b0 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a  hat value into.*
2c0c0 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  * register P3.  
2c0d0 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69  Or, if boolean i
2c0e0 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69 74 69  ndex P1 is initi
2c0f0 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76  ally empty, leav
2c100 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65  e P3.** unchange
2c110 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e  d and jump to in
2c120 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f  struction P2..*/
2c130 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52  .case OP_RowSetR
2c140 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  ead: {       /* 
2c150 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20  jump, in1, out3 
2c160 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20  */.  i64 val;.. 
2c170 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2c180 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
2c190 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2c1a0 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20  _RowSet)==0 .   
2c1b0 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  || sqlite3RowSet
2c1c0 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Next(pIn1->u.pRo
2c1d0 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20  wSet, &val)==0. 
2c1e0 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62   ){.    /* The b
2c1f0 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20  oolean index is 
2c200 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c  empty */.    sql
2c210 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2c220 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 56 64  ll(pIn1);.    Vd
2c230 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
2c240 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  2);.    goto jum
2c250 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
2c260 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2c270 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
2c280 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c   A value was pul
2c290 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64  led from the ind
2c2a0 65 78 20 2a 2f 0a 20 20 20 20 56 64 62 65 42 72  ex */.    VdbeBr
2c2b0 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a  anchTaken(0,2);.
2c2c0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2c2d0 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
2c2e0 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b  [pOp->p3], val);
2c2f0 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63  .  }.  goto chec
2c300 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2c310 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
2c320 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20  owSetTest P1 P2 
2c330 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69  P3 P4.** Synopsi
2c340 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72  s: if r[P3] in r
2c350 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50  owset(P1) goto P
2c360 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
2c370 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74   P3 is assumed t
2c380 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20  o hold a 64-bit 
2c390 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49  integer value. I
2c3a0 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  f register P1.**
2c3b0 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53   contains a RowS
2c3c0 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68  et object and th
2c3d0 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  at RowSet object
2c3e0 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65   contains.** the
2c3f0 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50   value held in P
2c400 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73  3, jump to regis
2c410 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ter P2. Otherwis
2c420 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a  e, insert the.**
2c430 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69   integer in P3 i
2c440 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61  nto the RowSet a
2c450 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74  nd continue on t
2c460 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70  o the.** next op
2c470 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
2c480 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73  RowSet object is
2c490 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74   optimized for t
2c4a0 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73 75  he case where su
2c4b0 63 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a  ccessive sets.**
2c4c0 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68   of integers, wh
2c4d0 65 72 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e  ere each set con
2c4e0 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61  tains no duplica
2c4f0 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a  tes. Each set.**
2c500 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69 64   of values is id
2c510 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e  entified by a un
2c520 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54  ique P4 value. T
2c530 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20  he first set.** 
2c540 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c  must have P4==0,
2c550 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50   the final set P
2c560 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62  4=-1.  P4 must b
2c570 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a  e either -1 or.*
2c580 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20  * non-negative. 
2c590 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76   For non-negativ
2c5a0 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f  e values of P4 o
2c5b0 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a  nly the lower 4.
2c5c0 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69 67 6e  ** bits are sign
2c5d0 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54  ificant..**.** T
2c5e0 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d  his allows optim
2c5f0 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68  izations: (a) wh
2c600 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69  en P4==0 there i
2c610 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73  s no need to tes
2c620 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20  t.** the rowset 
2c630 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61  object for P3, a
2c640 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65  s it is guarante
2c650 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69  ed not to contai
2c660 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65  n it,.** (b) whe
2c670 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69  n P4==-1 there i
2c680 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73  s no need to ins
2c690 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61  ert the value, a
2c6a0 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76  s it will.** nev
2c6b0 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72  er be tested for
2c6c0 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61  , and (c) when a
2c6d0 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70   value that is p
2c6e0 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a  art of set X is.
2c6f0 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65  ** inserted, the
2c700 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
2c710 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69   search to see i
2c720 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  f the same value
2c730 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73   was.** previous
2c740 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ly inserted as p
2c750 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e  art of set X (on
2c760 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65  ly if it was pre
2c770 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72  viously.** inser
2c780 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
2c790 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a  ome other set)..
2c7a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
2c7b0 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20  tTest: {        
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2c7d0 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
2c7e0 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20  /.  int iSet;.  
2c7f0 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70  int exists;..  p
2c800 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2c810 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
2c820 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2c830 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e   iSet = pOp->p4.
2c840 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  i;.  assert( pIn
2c850 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  3->flags&MEM_Int
2c860 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   );..  /* If the
2c870 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f  re is anything o
2c880 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73  ther than a rows
2c890 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d  et object in mem
2c8a0 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a  ory cell P1,.  *
2c8b0 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20  * delete it now 
2c8c0 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50  and initialize P
2c8d0 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20  1 with an empty 
2c8e0 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66  rowset.  */.  if
2c8f0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2c900 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2c910 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2c920 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
2c930 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70  In1);.    if( (p
2c940 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2c950 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f  _RowSet)==0 ) go
2c960 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
2c970 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2c980 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
2c990 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65  );.  assert( iSe
2c9a0 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30  t==-1 || iSet>=0
2c9b0 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29   );.  if( iSet )
2c9c0 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73  {.    exists = s
2c9d0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
2c9e0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2c9f0 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e  , iSet, pIn3->u.
2ca00 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  i);.    VdbeBran
2ca10 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d  chTaken(exists!=
2ca20 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78  0,2);.    if( ex
2ca30 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
2ca40 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66  _to_p2;.  }.  if
2ca50 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20  ( iSet>=0 ){.   
2ca60 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
2ca70 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  sert(pIn1->u.pRo
2ca80 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29  wSet, pIn3->u.i)
2ca90 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2caa0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
2cab0 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a  E_OMIT_TRIGGER..
2cac0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72  /* Opcode: Progr
2cad0 61 6d 20 50 31 20 50 32 20 50 33 20 50 34 20 50  am P1 P2 P3 P4 P
2cae0 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  5.**.** Execute 
2caf0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
2cb00 72 61 6d 20 70 61 73 73 65 64 20 61 73 20 50 34  ram passed as P4
2cb10 20 28 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f   (type P4_SUBPRO
2cb20 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31  GRAM). .**.** P1
2cb30 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
2cb40 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d  dress of the mem
2cb50 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f  ory cell that co
2cb60 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 74  ntains the first
2cb70 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
2cb80 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
2cb90 76 61 6c 75 65 73 20 75 73 65 64 20 61 73 20 61  values used as a
2cba0 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
2cbb0 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20  sub-program. P2 
2cbc0 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  .** contains the
2cbd0 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70   address to jump
2cbe0 20 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70   to if the sub-p
2cbf0 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e  rogram throws an
2cc00 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65   IGNORE .** exce
2cc10 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20  ption using the 
2cc20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e  RAISE() function
2cc30 2e 20 52 65 67 69 73 74 65 72 20 50 33 20 63 6f  . Register P3 co
2cc40 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
2cc50 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f  ss .** of a memo
2cc60 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20  ry cell in this 
2cc70 28 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20  (the parent) VM 
2cc80 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
2cc90 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a  allocate the .**
2cca0 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
2ccb0 20 62 79 20 74 68 65 20 73 75 62 2d 76 64 62 65   by the sub-vdbe
2ccc0 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a   at runtime..**.
2ccd0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2cce0 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e  er to the VM con
2ccf0 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
2cd00 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a  ger program..**.
2cd10 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
2cd20 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72  zero, then recur
2cd30 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76  sive program inv
2cd40 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c  ocation is enabl
2cd50 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  ed..*/.case OP_P
2cd60 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  rogram: {       
2cd70 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
2cd80 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
2cd90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2cda0 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74  of memory regist
2cdb0 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  ers for sub-prog
2cdc0 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79  ram */.  int nBy
2cdd0 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
2cde0 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e   /* Bytes of run
2cdf0 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69  time space requi
2ce00 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  red for sub-prog
2ce10 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ram */.  Mem *pR
2ce20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2ce30 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
2ce40 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65  allocate runtime
2ce50 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20   space */.  Mem 
2ce60 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
2ce70 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69      /* Used to i
2ce80 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d  terate through m
2ce90 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20  emory cells */. 
2cea0 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20   Mem *pEnd;     
2ceb0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
2cec0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
2ced0 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56  new array */.  V
2cee0 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
2cef0 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64  ;      /* New vd
2cf00 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63  be frame to exec
2cf10 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50  ute in */.  SubP
2cf20 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
2cf30 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72  ;   /* Sub-progr
2cf40 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f  am to execute */
2cf50 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20  .  void *t;     
2cf60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
2cf70 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20  ken identifying 
2cf80 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50  trigger */..  pP
2cf90 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34  rogram = pOp->p4
2cfa0 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74  .pProgram;.  pRt
2cfb0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2cfc0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72  ];.  assert( pPr
2cfd0 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a  ogram->nOp>0 );.
2cfe0 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70    .  /* If the p
2cff0 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c  5 flag is clear,
2d000 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
2d010 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
2d020 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20  iggers is .  ** 
2d030 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63  disabled for bac
2d040 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69  kwards compatibi
2d050 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20  lity (p5 is set 
2d060 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67  if this sub-prog
2d070 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c  ram.  ** is real
2d080 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f  ly a trigger, no
2d090 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  t a foreign key 
2d0a0 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20  action, and the 
2d0b0 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e  flag set.  ** an
2d0c0 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65  d cleared by the
2d0d0 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69   "PRAGMA recursi
2d0e0 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d  ve_triggers" com
2d0f0 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a  mand is clear)..
2d100 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73    ** .  ** It is
2d110 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
2d120 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
2d130 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65  s, at the SQL le
2d140 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20  vel, that is .  
2d150 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20  ** disabled. In 
2d160 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e  some cases a sin
2d170 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  gle trigger may 
2d180 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68  generate more th
2d190 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62  an one .  ** Sub
2d1a0 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20  Program (if the 
2d1b0 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65  trigger may be e
2d1c0 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72  xecuted with mor
2d1d0 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65  e than one diffe
2d1e0 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f  rent .  ** ON CO
2d1f0 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
2d200 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74  ). SubProgram st
2d210 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61  ructures associa
2d220 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20  ted with a.  ** 
2d230 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61  single trigger a
2d240 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ll have the same
2d250 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53   value for the S
2d260 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20  ubProgram.token 
2d270 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20  .  ** variable. 
2d280 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
2d290 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72  5 ){.    t = pPr
2d2a0 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20  ogram->token;.  
2d2b0 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
2d2c0 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26  pFrame; pFrame &
2d2d0 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21  & pFrame->token!
2d2e0 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  =t; pFrame=pFram
2d2f0 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
2d300 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72   if( pFrame ) br
2d310 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
2d320 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61  p->nFrame>=db->a
2d330 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
2d340 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48  IT_TRIGGER_DEPTH
2d350 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ] ){.    rc = SQ
2d360 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
2d370 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
2d380 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65  (p, "too many le
2d390 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20  vels of trigger 
2d3a0 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20  recursion");.   
2d3b0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
2d3c0 2a 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69  * Register pRt i
2d3d0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2d3e0 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  the memory requi
2d3f0 72 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20  red to save the 
2d400 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68  state.  ** of th
2d410 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61  e current progra
2d420 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72  m, and the memor
2d430 79 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75  y required at ru
2d440 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65  ntime to execute
2d450 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65  .  ** the trigge
2d460 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68  r program. If th
2d470 69 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62  is trigger has b
2d480 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65  een fired before
2d490 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a  , then pRt .  **
2d4a0 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f   is already allo
2d4b0 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  cated. Otherwise
2d4c0 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69  , it must be ini
2d4d0 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20  tialized.  */.  
2d4e0 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26  if( (pRt->flags&
2d4f0 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b  MEM_Frame)==0 ){
2d500 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72  .    /* SubProgr
2d510 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74  am.nMem is set t
2d520 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
2d530 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65  memory cells use
2d540 64 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a  d by the .    **
2d550 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20   program stored 
2d560 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f  in SubProgram.aO
2d570 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68  p. As well as th
2d580 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a  ese, one memory.
2d590 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72      ** cell is r
2d5a0 65 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68  equired for each
2d5b0 20 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20   cursor used by 
2d5c0 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74  the program. Set
2d5d0 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61   local.    ** va
2d5e0 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64  riable nMem (and
2d5f0 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d   later, VdbeFram
2d600 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20  e.nChildMem) to 
2d610 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20  this value..    
2d620 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50  */.    nMem = pP
2d630 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70  rogram->nMem + p
2d640 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
2d650 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44     nByte = ROUND
2d660 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61  8(sizeof(VdbeFra
2d670 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  me)).           
2d680 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65     + nMem * size
2d690 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20  of(Mem).        
2d6a0 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d        + pProgram
2d6b0 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28  ->nCsr * sizeof(
2d6c0 56 64 62 65 43 75 72 73 6f 72 20 2a 29 0a 20 20  VdbeCursor *).  
2d6d0 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50              + pP
2d6e0 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20  rogram->nOnce * 
2d6f0 73 69 7a 65 6f 66 28 75 38 29 3b 0a 20 20 20 20  sizeof(u8);.    
2d700 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  pFrame = sqlite3
2d710 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c  DbMallocZero(db,
2d720 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28   nByte);.    if(
2d730 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20   !pFrame ){.    
2d740 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
2d750 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
2d760 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
2d770 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c  Rt);.    pRt->fl
2d780 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b  ags = MEM_Frame;
2d790 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61  .    pRt->u.pFra
2d7a0 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20  me = pFrame;..  
2d7b0 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b    pFrame->v = p;
2d7c0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
2d7d0 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20  ildMem = nMem;. 
2d7e0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
2d7f0 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d  dCsr = pProgram-
2d800 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  >nCsr;.    pFram
2d810 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  e->pc = (int)(pO
2d820 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 70 46  p - aOp);.    pF
2d830 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e  rame->aMem = p->
2d840 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  aMem;.    pFrame
2d850 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d  ->nMem = p->nMem
2d860 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70  ;.    pFrame->ap
2d870 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a  Csr = p->apCsr;.
2d880 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72      pFrame->nCur
2d890 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72  sor = p->nCursor
2d8a0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f  ;.    pFrame->aO
2d8b0 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
2d8c0 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d  pFrame->nOp = p-
2d8d0 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65  >nOp;.    pFrame
2d8e0 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72  ->token = pProgr
2d8f0 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 70  am->token;.    p
2d900 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61 67  Frame->aOnceFlag
2d910 20 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b   = p->aOnceFlag;
2d920 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e  .    pFrame->nOn
2d930 63 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63  ceFlag = p->nOnc
2d940 65 46 6c 61 67 3b 0a 23 69 66 64 65 66 20 53 51  eFlag;.#ifdef SQ
2d950 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
2d960 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20  _SCANSTATUS.    
2d970 70 46 72 61 6d 65 2d 3e 61 6e 45 78 65 63 20 3d  pFrame->anExec =
2d980 20 70 2d 3e 61 6e 45 78 65 63 3b 0a 23 65 6e 64   p->anExec;.#end
2d990 69 66 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26  if..    pEnd = &
2d9a0 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2d9b0 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68  ame)[pFrame->nCh
2d9c0 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72  ildMem];.    for
2d9d0 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d  (pMem=VdbeFrameM
2d9e0 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d  em(pFrame); pMem
2d9f0 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b  !=pEnd; pMem++){
2da00 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
2da10 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
2da20 65 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  ed;.      pMem->
2da30 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20  db = db;.    }. 
2da40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61   }else{.    pFra
2da50 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61  me = pRt->u.pFra
2da60 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  me;.    assert( 
2da70 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70  pProgram->nMem+p
2da80 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70  Program->nCsr==p
2da90 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2daa0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2dab0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
2dac0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
2dad0 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  r );.    assert(
2dae0 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
2daf0 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b  )==pFrame->pc );
2db00 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d  .  }..  p->nFram
2db10 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  e++;.  pFrame->p
2db20 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61  Parent = p->pFra
2db30 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61  me;.  pFrame->la
2db40 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
2db50 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  wid;.  pFrame->n
2db60 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
2db70 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  nge;.  pFrame->n
2db80 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62  DbChange = p->db
2db90 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e  ->nChange;.  p->
2dba0 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70  nChange = 0;.  p
2dbb0 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  ->pFrame = pFram
2dbc0 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61  e;.  p->aMem = a
2dbd0 4d 65 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65  Mem = &VdbeFrame
2dbe0 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b  Mem(pFrame)[-1];
2dbf0 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72  .  p->nMem = pFr
2dc00 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a  ame->nChildMem;.
2dc10 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28    p->nCursor = (
2dc20 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69  u16)pFrame->nChi
2dc30 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73  ldCsr;.  p->apCs
2dc40 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20  r = (VdbeCursor 
2dc50 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  **)&aMem[p->nMem
2dc60 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20  +1];.  p->aOp = 
2dc70 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  aOp = pProgram->
2dc80 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20  aOp;.  p->nOp = 
2dc90 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20  pProgram->nOp;. 
2dca0 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20   p->aOnceFlag = 
2dcb0 28 75 38 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b  (u8 *)&p->apCsr[
2dcc0 70 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70  p->nCursor];.  p
2dcd0 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50  ->nOnceFlag = pP
2dce0 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 23  rogram->nOnce;.#
2dcf0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2dd00 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
2dd10 54 55 53 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20  TUS.  p->anExec 
2dd20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f  = 0;.#endif.  pO
2dd30 70 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a 20 20  p = &aOp[-1];.  
2dd40 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65 46  memset(p->aOnceF
2dd50 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65  lag, 0, p->nOnce
2dd60 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b 3b  Flag);..  break;
2dd70 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
2dd80 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  aram P1 P2 * * *
2dd90 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2dda0 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20  de is only ever 
2ddb0 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70  present in sub-p
2ddc0 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76  rograms called v
2ddd0 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72  ia the .** OP_Pr
2dde0 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
2ddf0 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20  n. Copy a value 
2de00 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64  currently stored
2de10 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a   in a memory .**
2de20 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c   cell of the cal
2de30 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72  ling (parent) fr
2de40 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69  ame to cell P2 i
2de50 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  n the current fr
2de60 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73  ames .** address
2de70 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20   space. This is 
2de80 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
2de90 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65  programs to acce
2dea0 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a  ss the new.* .**
2deb0 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65   and old.* value
2dec0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64  s..**.** The add
2ded0 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c  ress of the cell
2dee0 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66   in the parent f
2def0 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e  rame is determin
2df00 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20  ed by adding.** 
2df10 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
2df20 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
2df30 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
2df40 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
2df50 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f  the.** calling O
2df60 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
2df70 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
2df80 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20  P_Param: {      
2df90 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
2dfa0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
2dfb0 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b  ame;.  Mem *pIn;
2dfc0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
2dfd0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
2dfe0 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e  ;.  pFrame = p->
2dff0 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20  pFrame;.  pIn = 
2e000 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
2e010 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e  p->p1 + pFrame->
2e020 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e  aOp[pFrame->pc].
2e030 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65  p1];   .  sqlite
2e040 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
2e050 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d  opy(pOut, pIn, M
2e060 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65  EM_Ephem);.  bre
2e070 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ak;.}..#endif /*
2e080 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
2e090 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a  OMIT_TRIGGER */.
2e0a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e0b0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2e0c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f  ./* Opcode: FkCo
2e0d0 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20  unter P1 P2 * * 
2e0e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66  *.** Synopsis: f
2e0f0 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a  kctr[P1]+=P2.**.
2e100 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22  ** Increment a "
2e110 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
2e120 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61  er" by P2 (P2 ma
2e130 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72  y be negative or
2e140 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49   positive)..** I
2e150 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
2e160 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  , the database c
2e170 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
2e180 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
2e190 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66   .** (deferred f
2e1a0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2e1b0 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69  raints). Otherwi
2e1c0 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72  se, if P1 is zer
2e1d0 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65  o, the .** state
2e1e0 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  ment counter is 
2e1f0 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d  incremented (imm
2e200 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
2e210 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
2e220 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f  .*/.case OP_FkCo
2e230 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64  unter: {.  if( d
2e240 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
2e250 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20  E_DeferFKs ){.  
2e260 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
2e270 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  mmCons += pOp->p
2e280 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  2;.  }else if( p
2e290 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62  Op->p1 ){.    db
2e2a0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
2e2b0 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
2e2c0 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43  lse{.    p->nFkC
2e2d0 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70  onstraint += pOp
2e2e0 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ->p2;.  }.  brea
2e2f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2e300 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20   FkIfZero P1 P2 
2e310 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2e320 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d  s: if fkctr[P1]=
2e330 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
2e340 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73   This opcode tes
2e350 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20  ts if a foreign 
2e360 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  key constraint-c
2e370 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
2e380 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20  tly zero..** If 
2e390 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  so, jump to inst
2e3a0 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65  ruction P2. Othe
2e3b0 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
2e3c0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2e3d0 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
2e3e0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
2e3f0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
2e400 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
2e410 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
2e420 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
2e430 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28  ter.** is zero (
2e440 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75  the one that cou
2e450 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  nts deferred con
2e460 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
2e470 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a  ns). If P1 is.**
2e480 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20   zero, the jump 
2e490 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
2e4a0 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72  statement constr
2e4b0 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
2e4c0 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61  zero.** (immedia
2e4d0 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
2e4e0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
2e4f0 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ions)..*/.case O
2e500 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20  P_FkIfZero: {   
2e510 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2e520 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
2e530 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
2e540 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72  Taken(db->nDefer
2e550 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62  redCons==0 && db
2e560 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
2e570 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  ns==0, 2);.    i
2e580 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  f( db->nDeferred
2e590 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
2e5a0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
2e5b0 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
2e5c0 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
2e5d0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2e5e0 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  en(p->nFkConstra
2e5f0 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  int==0 && db->nD
2e600 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
2e610 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70  0, 2);.    if( p
2e620 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
2e630 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
2e640 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
2e650 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2e660 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2e670 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
2e680 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
2e690 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69  REIGN_KEY */..#i
2e6a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2e6b0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
2e6c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61  /* Opcode: MemMa
2e6d0 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
2e6e0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
2e6f0 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d  =max(r[P1],r[P2]
2e700 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ).**.** P1 is a 
2e710 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
2e720 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
2e730 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20  is VM (the root 
2e740 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66  frame is.** diff
2e750 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63  erent from the c
2e760 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20  urrent frame if 
2e770 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2e780 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74   is being execut
2e790 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73  ed.** within a s
2e7a0 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74  ub-program). Set
2e7b0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
2e7c0 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
2e7d0 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20   maximum of .** 
2e7e0 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75  its current valu
2e7f0 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  e and the value 
2e800 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
2e810 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
2e820 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e  uction throws an
2e830 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65   error if the me
2e840 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74  mory cell is not
2e850 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e   initially.** an
2e860 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
2e870 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20  e OP_MemMax: {  
2e880 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
2e890 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
2e8a0 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46  ame;.  if( p->pF
2e8b0 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28  rame ){.    for(
2e8c0 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
2e8d0 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
2e8e0 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
2e8f0 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
2e900 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pIn1 = &pFrame->
2e910 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2e920 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
2e930 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2e940 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  ];.  }.  assert(
2e950 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
2e960 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
2e970 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
2e980 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
2e990 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2e9a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2e9b0 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
2e9c0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2e9d0 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20  i<pIn2->u.i){.  
2e9e0 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49    pIn1->u.i = pI
2e9f0 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62  n2->u.i;.  }.  b
2ea00 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2ea10 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  * SQLITE_OMIT_AU
2ea20 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a  TOINCREMENT */..
2ea30 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73  /* Opcode: IfPos
2ea40 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2ea50 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
2ea60 31 5d 3e 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  1]>0 goto P2.**.
2ea70 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
2ea80 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ust contain an i
2ea90 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68  nteger..** If th
2eaa0 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
2eab0 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67  ter P1 is 1 or g
2eac0 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20  reater, jump to 
2ead0 50 32 20 61 6e 64 0a 2a 2a 20 61 64 64 20 74 68  P2 and.** add th
2eae0 65 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20  e literal value 
2eaf0 50 33 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  P3 to register P
2eb00 31 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  1..**.** If the 
2eb10 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
2eb20 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
2eb30 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68 65  less than 1, the
2eb40 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
2eb50 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  s unchanged and 
2eb60 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20 74  control passes t
2eb70 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2eb80 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2eb90 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73  */.case OP_IfPos
2eba0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2ebb0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2ebc0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2ebd0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2ebe0 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2ebf0 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
2ec00 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e  hTaken( pIn1->u.
2ec10 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i>0, 2);.  if( p
2ec20 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 20 67 6f 74  In1->u.i>0 ) got
2ec30 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2ec40 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2ec50 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32  ode: IfNeg P1 P2
2ec60 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2ec70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50 33 2c 20  sis: r[P1]+=P3, 
2ec80 69 66 20 72 5b 50 31 5d 3c 30 20 67 6f 74 6f 20  if r[P1]<0 goto 
2ec90 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
2eca0 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
2ecb0 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
2ecc0 64 64 20 6c 69 74 65 72 61 6c 20 50 33 20 74 6f  dd literal P3 to
2ecd0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a   the value in.**
2ece0 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65   register P1 the
2ecf0 6e 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 6f  n if the value o
2ed00 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2ed10 20 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c   less than zero,
2ed20 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2f   jump to P2. .*/
2ed30 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20  .case OP_IfNeg: 
2ed40 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2ed50 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
2ed60 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2ed70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
2ed80 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2ed90 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b  );.  pIn1->u.i +
2eda0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 56 64 62  = pOp->p3;.  Vdb
2edb0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e  eBranchTaken(pIn
2edc0 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20  1->u.i<0, 2);.  
2edd0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20  if( pIn1->u.i<0 
2ede0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2edf0 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
2ee00 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a  * Opcode: IfNotZ
2ee10 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ero P1 P2 P3 * *
2ee20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2ee30 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20 72   r[P1]!=0 then r
2ee40 5b 50 31 5d 2b 3d 50 33 2c 20 67 6f 74 6f 20 50  [P1]+=P3, goto P
2ee50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
2ee60 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e   P1 must contain
2ee70 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
2ee80 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
2ee90 72 65 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a  register P1 is.*
2eea0 2a 20 69 6e 69 74 69 61 6c 6c 79 20 6e 6f 6e 7a  * initially nonz
2eeb0 65 72 6f 2c 20 74 68 65 6e 20 61 64 64 20 50 33  ero, then add P3
2eec0 20 74 6f 20 50 31 20 61 6e 64 20 6a 75 6d 70 20   to P1 and jump 
2eed0 74 6f 20 50 32 2e 20 20 49 66 20 72 65 67 69 73  to P2.  If regis
2eee0 74 65 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69  ter P1 is.** ini
2eef0 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61  tially zero, lea
2ef00 76 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64 20  ve it unchanged 
2ef10 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  and fall through
2ef20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  ..*/.case OP_IfN
2ef30 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20  otZero: {       
2ef40 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2ef50 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2ef60 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2ef70 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2ef80 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62  MEM_Int );.  Vdb
2ef90 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e  eBranchTaken(pIn
2efa0 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20  1->u.i<0, 2);.  
2efb0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b  if( pIn1->u.i ){
2efc0 0a 20 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  .     pIn1->u.i 
2efd0 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20  += pOp->p3;.    
2efe0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2eff0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2f000 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63  ../* Opcode: Dec
2f010 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20  rJumpZero P1 P2 
2f020 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2f030 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d  s: if (--r[P1])=
2f040 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
2f050 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
2f060 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65  t hold an intege
2f070 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68  r.  Decrement th
2f080 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
2f090 74 65 72 20 50 31 0a 2a 2a 20 74 68 65 6e 20 6a  ter P1.** then j
2f0a0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
2f0b0 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65 78   new value is ex
2f0c0 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63  actly zero..*/.c
2f0d0 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a  ase OP_DecrJumpZ
2f0e0 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a  ero: {      /* j
2f0f0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2f100 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2f110 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2f120 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2f130 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  nt );.  pIn1->u.
2f140 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  i--;.  VdbeBranc
2f150 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
2f160 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  ==0, 2);.  if( p
2f170 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f  In1->u.i==0 ) go
2f180 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
2f190 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
2f1a0 70 63 6f 64 65 3a 20 4a 75 6d 70 5a 65 72 6f 49  pcode: JumpZeroI
2f1b0 6e 63 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ncr P1 P2 * * *.
2f1c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
2f1d0 28 72 5b 50 31 5d 2b 2b 29 3d 3d 30 20 29 20 67  (r[P1]++)==0 ) g
2f1e0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65  oto P2.**.** The
2f1f0 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   register P1 mus
2f200 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2f210 65 67 65 72 2e 20 20 49 66 20 72 65 67 69 73 74  eger.  If regist
2f220 65 72 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c  er P1 is initial
2f230 6c 79 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 6e  ly.** zero, then
2f240 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 6e   jump to P2.  In
2f250 63 72 65 6d 65 6e 74 20 72 65 67 69 73 74 65 72  crement register
2f260 20 50 31 20 72 65 67 61 72 64 6c 65 73 73 20 6f   P1 regardless o
2f270 66 20 77 68 65 74 68 65 72 20 6f 72 0a 2a 2a 20  f whether or.** 
2f280 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  not the jump is 
2f290 74 61 6b 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  taken..*/.case O
2f2a0 50 5f 4a 75 6d 70 5a 65 72 6f 49 6e 63 72 3a 20  P_JumpZeroIncr: 
2f2b0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2f2c0 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
2f2d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2f2e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
2f2f0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2f300 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
2f310 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d  aken(pIn1->u.i==
2f320 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
2f330 6e 31 2d 3e 75 2e 69 2b 2b 29 3d 3d 30 20 29 20  n1->u.i++)==0 ) 
2f340 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2f350 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2f360 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 30  Opcode: AggStep0
2f370 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a   * P2 P3 P4 P5.*
2f380 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75  * Synopsis: accu
2f390 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50  m=r[P3] step(r[P
2f3a0 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65  2@P5]).**.** Exe
2f3b0 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
2f3c0 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
2f3d0 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
2f3e0 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
2f3f0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
2f400 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2f410 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20   the FuncDef.** 
2f420 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
2f430 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
2f440 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72  ction.  Register
2f450 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63   P3 is the.** ac
2f460 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
2f470 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
2f480 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
2f490 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
2f4a0 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
2f4b0 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rs..*/./* Opcode
2f4c0 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
2f4d0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2f4e0 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
2f4f0 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a   step(r[P2@P5]).
2f500 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
2f510 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
2f520 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
2f530 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69  .  The.** functi
2f540 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65  on has P5 argume
2f550 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70  nts.   P4 is a p
2f560 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
2f570 69 74 65 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20  ite3_context.** 
2f580 6f 62 6a 65 63 74 20 74 68 61 74 20 69 73 20 75  object that is u
2f590 73 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20 66  sed to run the f
2f5a0 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74  unction.  Regist
2f5b0 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 73 20 74  er P3 is.** as t
2f5c0 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  he accumulator..
2f5d0 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
2f5e0 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
2f5f0 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
2f600 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
2f610 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  cessors..**.** T
2f620 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e  his opcode is in
2f630 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73  itially coded as
2f640 20 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f   OP_AggStep0.  O
2f650 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61 74 69  n first evaluati
2f660 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44  on,.** the FuncD
2f670 65 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20  ef stored in P4 
2f680 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  is converted int
2f690 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
2f6a0 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20  text and.** the 
2f6b0 6f 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65  opcode is change
2f6c0 64 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c  d.  In this way,
2f6d0 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
2f6e0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71  ion of the.** sq
2f6f0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e  lite3_context on
2f700 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c  ly happens once,
2f710 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65   instead of on e
2f720 61 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a  ach call to the.
2f730 2a 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  ** step function
2f740 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
2f750 53 74 65 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e  Step0: {.  int n
2f760 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
2f770 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73  ext *pCtx;..  as
2f780 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
2f790 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b  e==P4_FUNCDEF );
2f7a0 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
2f7b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2f7c0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
2f7d0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
2f7e0 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74  sor) );.  assert
2f7f0 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e  ( n==0 || (pOp->
2f800 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
2f810 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  n<=(p->nMem-p->n
2f820 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20  Cursor)+1) );.  
2f830 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
2f840 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e  pOp->p2 || pOp->
2f850 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b  p3>=pOp->p2+n );
2f860 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65  .  pCtx = sqlite
2f870 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
2f880 20 73 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b   sizeof(*pCtx) +
2f890 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71   (n-1)*sizeof(sq
2f8a0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a  lite3_value*));.
2f8b0 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20    if( pCtx==0 ) 
2f8c0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
2f8d0 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20  Ctx->pMem = 0;. 
2f8e0 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70   pCtx->pFunc = p
2f8f0 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
2f900 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74  pCtx->iOp = (int
2f910 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
2f920 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b  pCtx->pVdbe = p;
2f930 0a 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20  .  pCtx->argc = 
2f940 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65  n;.  pOp->p4type
2f950 20 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20   = P4_FUNCCTX;. 
2f960 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20   pOp->p4.pCtx = 
2f970 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63  pCtx;.  pOp->opc
2f980 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70  ode = OP_AggStep
2f990 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
2f9a0 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53  ugh into OP_AggS
2f9b0 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50  tep */.}.case OP
2f9c0 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
2f9d0 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  t i;.  sqlite3_c
2f9e0 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20  ontext *pCtx;.  
2f9f0 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d  Mem *pMem;.  Mem
2fa00 20 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   t;..  assert( p
2fa10 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
2fa20 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78  UNCCTX );.  pCtx
2fa30 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b   = pOp->p4.pCtx;
2fa40 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
2fa50 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20  pOp->p3];..  /* 
2fa60 49 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  If this function
2fa70 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20   is inside of a 
2fa80 74 72 69 67 67 65 72 2c 20 74 68 65 20 72 65 67  trigger, the reg
2fa90 69 73 74 65 72 20 61 72 72 61 79 20 69 6e 20 61  ister array in a
2faa0 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74  Mem[].  ** might
2fab0 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65   change from one
2fac0 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74   evaluation to t
2fad0 68 65 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65  he next.  The ne
2fae0 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  xt block of code
2faf0 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20  .  ** checks to 
2fb00 73 65 65 20 69 66 20 74 68 65 20 72 65 67 69 73  see if the regis
2fb10 74 65 72 20 61 72 72 61 79 20 68 61 73 20 63 68  ter array has ch
2fb20 61 6e 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f  anged, and if so
2fb30 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69   it.  ** reiniti
2fb40 61 6c 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76  alizes the relav
2fb50 61 6e 74 20 70 61 72 74 73 20 6f 66 20 74 68 65  ant parts of the
2fb60 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
2fb70 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28   object */.  if(
2fb80 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70   pCtx->pMem != p
2fb90 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43 74 78 2d  Mem ){.    pCtx-
2fba0 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20  >pMem = pMem;.  
2fbb0 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72    for(i=pCtx->ar
2fbc0 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29  gc-1; i>=0; i--)
2fbd0 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d   pCtx->argv[i] =
2fbe0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69   &aMem[pOp->p2+i
2fbf0 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53  ];.  }..#ifdef S
2fc00 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
2fc10 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61  r(i=0; i<pCtx->a
2fc20 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  rgc; i++){.    a
2fc30 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2fc40 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  d(pCtx->argv[i])
2fc50 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
2fc60 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69  _TRACE(pOp->p2+i
2fc70 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  , pCtx->argv[i])
2fc80 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
2fc90 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c  pMem->n++;.  sql
2fca0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28  ite3VdbeMemInit(
2fcb0 26 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c  &t, db, MEM_Null
2fcc0 29 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20  );.  pCtx->pOut 
2fcd0 3d 20 26 74 3b 0a 20 20 70 43 74 78 2d 3e 66 45  = &t;.  pCtx->fE
2fce0 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20  rrorOrAux = 0;. 
2fcf0 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20   pCtx->skipFlag 
2fd00 3d 20 30 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46  = 0;.  (pCtx->pF
2fd10 75 6e 63 2d 3e 78 53 74 65 70 29 28 70 43 74 78  unc->xStep)(pCtx
2fd20 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78  ,pCtx->argc,pCtx
2fd30 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a  ->argv); /* IMP:
2fd40 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a   R-24505-23230 *
2fd50 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66 45  /.  if( pCtx->fE
2fd60 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20  rrorOrAux ){.   
2fd70 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72   if( pCtx->isErr
2fd80 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  or ){.      sqli
2fd90 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
2fda0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
2fdb0 6c 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a 20  lue_text(&t));. 
2fdc0 20 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e       rc = pCtx->
2fdd0 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  isError;.    }. 
2fde0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2fdf0 6d 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20 20  mRelease(&t);.  
2fe00 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2fe10 74 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  t( t.flags==MEM_
2fe20 4e 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20 69 66  Null );.  }.  if
2fe30 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67  ( pCtx->skipFlag
2fe40 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2fe50 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
2fe60 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
2fe70 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31    i = pOp[-1].p1
2fe80 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73 71  ;.    if( i ) sq
2fe90 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
2fea0 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31  nt64(&aMem[i], 1
2feb0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
2fec0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
2fed0 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50  gFinal P1 P2 * P
2fee0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
2fef0 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50   accum=r[P1] N=P
2ff00 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  2.**.** Execute 
2ff10 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75  the finalizer fu
2ff20 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
2ff30 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a  gregate.  P1 is.
2ff40 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  ** the memory lo
2ff50 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74  cation that is t
2ff60 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66  he accumulator f
2ff70 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65  or the aggregate
2ff80 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
2ff90 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
2ffa0 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73  ments that the s
2ffb0 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b  tep function tak
2ffc0 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20  es and.** P4 is 
2ffd0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
2ffe0 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69   FuncDef for thi
2fff0 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65  s function.  The
30000 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20   P2.** argument 
30010 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74  is not used by t
30020 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20  his opcode.  It 
30030 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f  is only there to
30040 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a   disambiguate.**
30050 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20   functions that 
30060 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67  can take varying
30070 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75   numbers of argu
30080 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50  ments.  The.** P
30090 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e  4 argument is on
300a0 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68  ly needed for th
300b0 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73  e degenerate cas
300c0 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73  e where.** the s
300d0 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  tep function was
300e0 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
300f0 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  called..*/.case 
30100 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20  OP_AggFinal: {. 
30110 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73   Mem *pMem;.  as
30120 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
30130 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
30140 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
30150 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d   );.  pMem = &aM
30160 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
30170 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
30180 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c  ags & ~(MEM_Null
30190 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b  |MEM_Agg))==0 );
301a0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
301b0 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70  dbeMemFinalize(p
301c0 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75  Mem, pOp->p4.pFu
301d0 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b  nc);.  if( rc ){
301e0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
301f0 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73  Error(p, "%s", s
30200 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
30210 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20  t(pMem));.  }.  
30220 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
30230 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20  eEncoding(pMem, 
30240 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44  encoding);.  UPD
30250 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
30260 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71  (pMem);.  if( sq
30270 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
30280 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20  ig(pMem) ){.    
30290 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
302a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
302b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
302c0 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T_WAL./* Opcode:
302d0 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50   Checkpoint P1 P
302e0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
302f0 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61  heckpoint databa
30300 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61  se P1. This is a
30310 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20   no-op if P1 is 
30320 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  not currently in
30330 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61  .** WAL mode. Pa
30340 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e  rameter P2 is on
30350 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43  e of SQLITE_CHEC
30360 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20  KPOINT_PASSIVE, 
30370 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54  FULL,.** RESTART
30380 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20  , or TRUNCATE.  
30390 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74  Write 1 or 0 int
303a0 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65  o mem[P3] if the
303b0 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75   checkpoint retu
303c0 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55  rns.** SQLITE_BU
303d0 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65  SY or not, respe
303e0 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20  ctively.  Write 
303f0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
30400 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41  ges in the.** WA
30410 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63  L after the chec
30420 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b  kpoint into mem[
30430 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75  P3+1] and the nu
30440 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a  mber of pages.**
30450 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74   in the WAL that
30460 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b   have been check
30470 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68  pointed after th
30480 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20  e checkpoint.** 
30490 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d  completes into m
304a0 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76  em[P3+2].  Howev
304b0 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20  er on an error, 
304c0 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a  mem[P3+1] and.**
304d0 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69   mem[P3+2] are i
304e0 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31  nitialized to -1
304f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65  ..*/.case OP_Che
30500 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74  ckpoint: {.  int
30510 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
30520 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
30530 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
30540 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20    int aRes[3];  
30550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30560 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a    /* Results */.
30570 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
30580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30590 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c    /* Write resul
305a0 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73  ts here */..  as
305b0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
305c0 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30  y==0 );.  aRes[0
305d0 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d  ] = 0;.  aRes[1]
305e0 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b   = aRes[2] = -1;
305f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
30600 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
30610 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20  POINT_PASSIVE.  
30620 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
30630 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
30640 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c  NT_FULL.       |
30650 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
30660 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
30670 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70  TART.       || p
30680 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
30690 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41  HECKPOINT_TRUNCA
306a0 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73  TE.  );.  rc = s
306b0 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
306c0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
306d0 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c  p->p2, &aRes[1],
306e0 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66   &aRes[2]);.  if
306f0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
30700 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  Y ){.    rc = SQ
30710 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65  LITE_OK;.    aRe
30720 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  s[0] = 1;.  }.  
30730 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20  for(i=0, pMem = 
30740 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20  &aMem[pOp->p3]; 
30750 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b  i<3; i++, pMem++
30760 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
30770 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d  beMemSetInt64(pM
30780 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d  em, (i64)aRes[i]
30790 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65  );.  }    .  bre
307a0 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a  ak;.};  .#endif.
307b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
307c0 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f  OMIT_PRAGMA./* O
307d0 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f  pcode: JournalMo
307e0 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
307f0 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65  **.** Change the
30800 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66   journal mode of
30810 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
30820 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f  P3. P3 must be o
30830 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47  ne of the.** PAG
30840 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58  ER_JOURNALMODE_X
30850 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68  XX values. If ch
30860 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74  anging between t
30870 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62  he various rollb
30880 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65  ack.** modes (de
30890 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20  lete, truncate, 
308a0 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64  persist, off and
308b0 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69   memory), this i
308c0 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70  s a simple.** op
308d0 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69  eration. No IO i
308e0 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a  s required..**.*
308f0 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e  * If changing in
30900 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c  to or out of WAL
30910 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64   mode the proced
30920 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70  ure is more comp
30930 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57  licated..**.** W
30940 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f  rite a string co
30950 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e  ntaining the fin
30960 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20  al journal-mode 
30970 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
30980 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e  */.case OP_Journ
30990 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20  alMode: {    /* 
309a0 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72 65 65 20  out2 */.  Btree 
309b0 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 20  *pBt;           
309c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72            /* Btr
309d0 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75  ee to change jou
309e0 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a  rnal mode of */.
309f0 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
30a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a10 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63    /* Pager assoc
30a20 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20 2a  iated with pBt *
30a30 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20  /.  int eNew;   
30a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a50 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e      /* New journ
30a60 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  al mode */.  int
30a70 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20   eOld;          
30a80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
30a90 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20  The old journal 
30aa0 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20  mode */.#ifndef 
30ab0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
30ac0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
30ad0 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20  ilename;        
30ae0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
30af0 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70  abase file for p
30b00 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a  Pager */.#endif.
30b10 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
30b20 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
30b30 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e  ;.  eNew = pOp->
30b40 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e  p3;.  assert( eN
30b50 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
30b60 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20  LMODE_DELETE .  
30b70 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
30b80 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
30b90 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20  TRUNCATE .      
30ba0 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
30bb0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53  JOURNALMODE_PERS
30bc0 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  IST .       || e
30bd0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
30be0 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20  ALMODE_OFF.     
30bf0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
30c00 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d  _JOURNALMODE_MEM
30c10 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  ORY.       || eN
30c20 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
30c30 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20  LMODE_WAL.      
30c40 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
30c50 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
30c60 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Y.  );.  assert(
30c70 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
30c80 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
30c90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
30ca0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20  eadOnly==0 );.. 
30cb0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
30cc0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70  Op->p1].pBt;.  p
30cd0 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
30ce0 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a  treePager(pBt);.
30cf0 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33    eOld = sqlite3
30d00 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d  PagerGetJournalM
30d10 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69  ode(pPager);.  i
30d20 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  f( eNew==PAGER_J
30d30 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
30d40 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
30d50 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50 61    if( !sqlite3Pa
30d60 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75  gerOkToChangeJou
30d70 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
30d80 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
30d90 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30da0 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65  OMIT_WAL.  zFile
30db0 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61  name = sqlite3Pa
30dc0 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67  gerFilename(pPag
30dd0 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f  er, 1);..  /* Do
30de0 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61   not allow a tra
30df0 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e  nsition to journ
30e00 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20  al_mode=WAL for 
30e10 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  a database.  ** 
30e20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f  in temporary sto
30e30 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20 56  rage or if the V
30e40 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70  FS does not supp
30e50 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72  ort shared memor
30e60 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e  y .  */.  if( eN
30e70 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
30e80 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20  LMODE_WAL.   && 
30e90 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30  (sqlite3Strlen30
30ea0 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20  (zFilename)==0  
30eb0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70           /* Temp
30ec0 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20   file */.       
30ed0 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65 72  || !sqlite3Pager
30ee0 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61  WalSupported(pPa
30ef0 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68  ger))   /* No sh
30f00 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70  ared-memory supp
30f10 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20  ort */.  ){.    
30f20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d  eNew = eOld;.  }
30f30 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65  ..  if( (eNew!=e
30f40 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64  Old).   && (eOld
30f50 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
30f60 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d  ODE_WAL || eNew=
30f70 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
30f80 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20  DE_WAL).  ){.   
30f90 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
30fa0 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62  mmit || db->nVdb
30fb0 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20  eRead>1 ){.     
30fc0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
30fd0 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  OR;.      sqlite
30fe0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20  3VdbeError(p,.  
30ff0 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
31000 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f  change %s wal mo
31010 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  de from within a
31020 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20   transaction",. 
31030 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d           (eNew==
31040 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
31050 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a  E_WAL ? "into" :
31060 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20   "out of").     
31070 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   );.      break;
31080 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20  .    }else{. .  
31090 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41      if( eOld==PA
310a0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
310b0 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  WAL ){.        /
310c0 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c  * If leaving WAL
310d0 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65   mode, close the
310e0 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75   log file. If su
310f0 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61  ccessful, the ca
31100 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f  ll.        ** to
31110 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29   PagerCloseWal()
31120 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64   checkpoints and
31130 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69   deletes the wri
31140 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20  te-ahead-log .  
31150 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41        ** file. A
31160 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
31170 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65   may still be he
31180 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ld on the databa
31190 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20  se file .       
311a0 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63   ** after a succ
311b0 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a  essful return. .
311c0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
311d0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50     rc = sqlite3P
311e0 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61  agerCloseWal(pPa
311f0 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ger);.        if
31200 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
31210 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
31220 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
31230 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
31240 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d  eNew);.        }
31250 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
31260 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
31270 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20  RNALMODE_MEMORY 
31280 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61  ){.        /* Ca
31290 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20  nnot transition 
312a0 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45  directly from ME
312b0 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73  MORY to WAL.  Us
312c0 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20  e mode OFF.     
312d0 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65     ** as an inte
312e0 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20  rmediate */.    
312f0 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
31300 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
31310 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55  Pager, PAGER_JOU
31320 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20  RNALMODE_OFF);. 
31330 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
31340 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61  /* Open a transa
31350 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74  ction on the dat
31360 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61  abase file. Rega
31370 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f  rdless of the jo
31380 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d  urnal.      ** m
31390 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61  ode, this transa
313a0 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65  ction always use
313b0 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
313c0 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  rnal..      */. 
313d0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
313e0 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
313f0 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20  ns(pBt)==0 );.  
31400 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
31410 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
31420 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
31430 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74  eeSetVersion(pBt
31440 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  , (eNew==PAGER_J
31450 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
31460 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20   2 : 1));.      
31470 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  }.    }.  }.#end
31480 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c  if /* ifndef SQL
31490 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a  ITE_OMIT_WAL */.
314a0 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
314b0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
314c0 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74  }.  eNew = sqlit
314d0 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
314e0 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
314f0 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c  ew);..  pOut->fl
31500 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
31510 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
31520 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28  m;.  pOut->z = (
31530 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f  char *)sqlite3Jo
31540 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e  urnalModename(eN
31550 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ew);.  pOut->n =
31560 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
31570 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75  (pOut->z);.  pOu
31580 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
31590 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56  UTF8;.  sqlite3V
315a0 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
315b0 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
315c0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23  );.  break;.};.#
315d0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
315e0 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a  OMIT_PRAGMA */..
315f0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
31600 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29  ITE_OMIT_VACUUM)
31610 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
31620 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29  ITE_OMIT_ATTACH)
31630 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75  ./* Opcode: Vacu
31640 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  um * * * * *.**.
31650 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e  ** Vacuum the en
31660 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20 20  tire database.  
31670 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  This opcode will
31680 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69 72   cause other vir
31690 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73  tual.** machines
316a0 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20 61   to be created a
316b0 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20  nd run.  It may 
316c0 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72  not be called fr
316d0 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74  om within.** a t
316e0 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  ransaction..*/.c
316f0 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b  ase OP_Vacuum: {
31700 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
31710 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72  adOnly==0 );.  r
31720 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61  c = sqlite3RunVa
31730 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67  cuum(&p->zErrMsg
31740 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  , db);.  break;.
31750 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64  }.#endif..#if !d
31760 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
31770 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f  IT_AUTOVACUUM)./
31780 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61  * Opcode: IncrVa
31790 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  cuum P1 P2 * * *
317a0 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61  .**.** Perform a
317b0 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20   single step of 
317c0 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  the incremental 
317d0 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65  vacuum procedure
317e0 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61   on.** the P1 da
317f0 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76  tabase. If the v
31800 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68  acuum has finish
31810 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  ed, jump to inst
31820 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f  ruction.** P2. O
31830 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
31840 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
31850 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
31860 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56  */.case OP_IncrV
31870 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20  acuum: {        
31880 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72  /* jump */.  Btr
31890 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
318a0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
318b0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
318c0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
318d0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
318e0 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
318f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
31900 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
31910 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
31920 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
31930 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
31940 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29  eIncrVacuum(pBt)
31950 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
31960 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44  ken(rc==SQLITE_D
31970 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72 63  ONE,2);.  if( rc
31980 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b  ==SQLITE_DONE ){
31990 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
319a0 5f 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  _OK;.    goto ju
319b0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
319c0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
319d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69  ./* Opcode: Expi
319e0 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  re P1 * * * *.**
319f0 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d  .** Cause precom
31a00 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73  piled statements
31a10 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57 68 65   to expire.  Whe
31a20 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73 74 61  n an expired sta
31a30 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65  tement.** is exe
31a40 63 75 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69  cuted using sqli
31a50 74 65 33 5f 73 74 65 70 28 29 20 69 74 20 77 69  te3_step() it wi
31a60 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f 6d 61  ll either automa
31a70 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65  tically.** repre
31a80 70 61 72 65 20 69 74 73 65 6c 66 20 28 69 66 20  pare itself (if 
31a90 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  it was originall
31aa0 79 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  y created using 
31ab0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
31ac0 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77  v2()).** or it w
31ad0 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 53 51  ill fail with SQ
31ae0 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20  LITE_SCHEMA..** 
31af0 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20  .** If P1 is 0, 
31b00 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61  then all SQL sta
31b10 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65  tements become e
31b20 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73  xpired. If P1 is
31b30 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68   non-zero,.** th
31b40 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72  en only the curr
31b50 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
31b60 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 70  statement is exp
31b70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ired..*/.case OP
31b80 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28  _Expire: {.  if(
31b90 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20   !pOp->p1 ){.   
31ba0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
31bb0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
31bc0 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (db);.  }else{. 
31bd0 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
31be0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
31bf0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
31c00 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
31c10 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  CHE./* Opcode: T
31c20 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50  ableLock P1 P2 P
31c30 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
31c40 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d  is: iDb=P1 root=
31c50 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a  P2 write=P3.**.*
31c60 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20  * Obtain a lock 
31c70 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  on a particular 
31c80 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74  table. This inst
31c90 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ruction is only 
31ca0 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65  used when.** the
31cb0 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65   shared-cache fe
31cc0 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
31cd0 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  . .**.** P1 is t
31ce0 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
31cf0 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69  database in sqli
31d00 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65  te3.aDb[] of the
31d10 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20   database.** on 
31d20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69  which the lock i
31d30 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72  s acquired.  A r
31d40 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69  eadlock is obtai
31d50 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a  ned if P3==0 or.
31d60 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20  ** a write lock 
31d70 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20  if P3==1..**.** 
31d80 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P2 contains the 
31d90 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
31da0 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a   table to lock..
31db0 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e  **.** P4 contain
31dc0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
31dd0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
31de0 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65  able being locke
31df0 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a  d. This is only.
31e00 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  ** used to gener
31e10 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  ate an error mes
31e20 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b  sage if the lock
31e30 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69   cannot be obtai
31e40 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ned..*/.case OP_
31e50 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75  TableLock: {.  u
31e60 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20  8 isWriteLock = 
31e70 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 23 69 66  (u8)pOp->p3;.#if
31e80 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
31e90 5f 43 4f 4e 43 55 52 52 45 4e 54 0a 20 20 69 66  _CONCURRENT.  if
31ea0 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 26 26  ( isWriteLock &&
31eb0 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74   db->bConcurrent
31ec0 20 26 26 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 29   && pOp->p2==1 )
31ed0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
31ee0 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c  E_ERROR;.    sql
31ef0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
31f00 20 0a 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f   .        "canno
31f10 74 20 6d 6f 64 69 66 79 20 64 61 74 61 62 61 73  t modify databas
31f20 65 20 73 63 68 65 6d 61 20 77 69 74 68 69 6e 20  e schema within 
31f30 43 4f 4e 43 55 52 52 45 4e 54 20 74 72 61 6e 73  CONCURRENT trans
31f40 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72  action");.    br
31f50 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
31f60 20 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63    if( isWriteLoc
31f70 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61  k || 0==(db->fla
31f80 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  gs&SQLITE_ReadUn
31f90 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20  committed) ){.  
31fa0 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e    int p1 = pOp->
31fb0 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28  p1; .    assert(
31fc0 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d   p1>=0 && p1<db-
31fd0 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65  >nDb );.    asse
31fe0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
31ff0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 31 29  ->btreeMask, p1)
32000 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
32010 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c  isWriteLock==0 |
32020 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31  | isWriteLock==1
32030 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
32040 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62  ite3BtreeLockTab
32050 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70  le(db->aDb[p1].p
32060 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57  Bt, pOp->p2, isW
32070 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69  riteLock);.    i
32080 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51  f( (rc&0xFF)==SQ
32090 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20  LITE_LOCKED ){. 
320a0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
320b0 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  *z = pOp->p4.z;.
320c0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
320d0 65 45 72 72 6f 72 28 70 2c 20 22 64 61 74 61 62  eError(p, "datab
320e0 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
320f0 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20  ked: %s", z);.  
32100 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
32110 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
32120 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
32130 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  CACHE */..#ifnde
32140 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
32150 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
32160 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a  code: VBegin * *
32170 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
32180 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65   may be a pointe
32190 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
321a0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20  vtab structure. 
321b0 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20  If so, call the 
321c0 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f  .** xBegin metho
321d0 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
321e0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68  ..**.** Also, wh
321f0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20  ether or not P4 
32200 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68  is set, check th
32210 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62  at this is not b
32220 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
32230 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c  .** within a cal
32240 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75  lback to a virtu
32250 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29  al table xSync()
32260 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69   method. If it i
32270 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20  s, the error.** 
32280 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74  code will be set
32290 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   to SQLITE_LOCKE
322a0 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42  D..*/.case OP_VB
322b0 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65  egin: {.  VTable
322c0 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62   *pVTab;.  pVTab
322d0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
322e0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
322f0 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56  VtabBegin(db, pV
32300 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61  Tab);.  if( pVTa
32310 62 20 29 20 73 71 6c 69 74 65 33 56 74 61 62 49  b ) sqlite3VtabI
32320 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
32330 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20  VTab->pVtab);.  
32340 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
32350 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
32360 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
32370 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
32380 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
32390 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65  ./* Opcode: VCre
323a0 61 74 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ate P1 P2 * * *.
323b0 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 61 20 72 65  **.** P2 is a re
323c0 67 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64  gister that hold
323d0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
323e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
323f0 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 50 31   database .** P1
32400 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61  . Call the xCrea
32410 74 65 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68  te method for th
32420 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  at table..*/.cas
32430 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a  e OP_VCreate: {.
32440 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20    Mem sMem;     
32450 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72       /* For stor
32460 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62  ing the record b
32470 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
32480 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
32490 61 62 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ab;  /* Name of 
324a0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
324b0 65 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26  e */..  memset(&
324c0 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28  sMem, 0, sizeof(
324d0 73 4d 65 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64  sMem));.  sMem.d
324e0 62 20 3d 20 64 62 3b 0a 20 20 2f 2a 20 42 65 63  b = db;.  /* Bec
324f0 61 75 73 65 20 50 32 20 69 73 20 61 6c 77 61 79  ause P2 is alway
32500 73 20 61 20 73 74 61 74 69 63 20 73 74 72 69 6e  s a static strin
32510 67 2c 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69  g, it is impossi
32520 62 6c 65 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ble for the.  **
32530 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
32540 6f 70 79 28 29 20 74 6f 20 66 61 69 6c 20 2a 2f  opy() to fail */
32550 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d  .  assert( (aMem
32560 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20  [pOp->p2].flags 
32570 26 20 4d 45 4d 5f 53 74 72 29 21 3d 30 20 29 3b  & MEM_Str)!=0 );
32580 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d  .  assert( (aMem
32590 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20  [pOp->p2].flags 
325a0 26 20 4d 45 4d 5f 53 74 61 74 69 63 29 21 3d 30  & MEM_Static)!=0
325b0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
325c0 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 26 73  e3VdbeMemCopy(&s
325d0 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  Mem, &aMem[pOp->
325e0 70 32 5d 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2]);.  assert( 
325f0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
32600 0a 20 20 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74  .  zTab = (const
32610 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76   char*)sqlite3_v
32620 61 6c 75 65 5f 74 65 78 74 28 26 73 4d 65 6d 29  alue_text(&sMem)
32630 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 54 61 62  ;.  assert( zTab
32640 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61   || db->mallocFa
32650 69 6c 65 64 20 29 3b 0a 20 20 69 66 28 20 7a 54  iled );.  if( zT
32660 61 62 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  ab ){.    rc = s
32670 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
32680 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  eate(db, pOp->p1
32690 2c 20 7a 54 61 62 2c 20 26 70 2d 3e 7a 45 72 72  , zTab, &p->zErr
326a0 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  Msg);.  }.  sqli
326b0 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
326c0 65 28 26 73 4d 65 6d 29 3b 0a 20 20 62 72 65 61  e(&sMem);.  brea
326d0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
326e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
326f0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
32700 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
32710 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
32720 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79  Opcode: VDestroy
32730 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
32740 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
32750 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
32760 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
32770 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78   P1.  Call the x
32780 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a  Destroy method.*
32790 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e  * of that table.
327a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73  .*/.case OP_VDes
327b0 74 72 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56  troy: {.  db->nV
327c0 44 65 73 74 72 6f 79 2b 2b 3b 0a 20 20 72 63 20  Destroy++;.  rc 
327d0 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  = sqlite3VtabCal
327e0 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70  lDestroy(db, pOp
327f0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
32800 3b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f  ;.  db->nVDestro
32810 79 2d 2d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  y--;.  break;.}.
32820 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
32830 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
32840 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
32850 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
32860 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
32870 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20  e: VOpen P1 * * 
32880 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
32890 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
328a0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
328b0 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
328c0 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
328d0 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
328e0 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73  or number.  This
328f0 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20   opcode opens a 
32900 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69  cursor to the vi
32910 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61  rtual.** table a
32920 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63  nd stores that c
32930 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a  ursor in P1..*/.
32940 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b  case OP_VOpen: {
32950 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
32960 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
32970 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61  tab_cursor *pVta
32980 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74  bCursor;.  sqlit
32990 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
329a0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
329b0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
329c0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
329d0 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70 43  IsReader );.  pC
329e0 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 43  ur = 0;.  pVtabC
329f0 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74  ursor = 0;.  pVt
32a00 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
32a10 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28  ab->pVtab;.  if(
32a20 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56   pVtab==0 || NEV
32a30 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  ER(pVtab->pModul
32a40 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20  e==0) ){.    rc 
32a50 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
32a60 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
32a70 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
32a80 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 72 63  b->pModule;.  rc
32a90 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65   = pModule->xOpe
32aa0 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61 62 43  n(pVtab, &pVtabC
32ab0 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65  ursor);.  sqlite
32ac0 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
32ad0 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
32ae0 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63  f( SQLITE_OK==rc
32af0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69   ){.    /* Initi
32b00 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74  alize sqlite3_vt
32b10 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63  ab_cursor base c
32b20 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61  lass */.    pVta
32b30 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d  bCursor->pVtab =
32b40 20 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20   pVtab;..    /* 
32b50 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20  Initialize vdbe 
32b60 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f  cursor object */
32b70 0a 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  .    pCur = allo
32b80 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
32b90 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29  p->p1, 0, -1, 0)
32ba0 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29  ;.    if( pCur )
32bb0 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56  {.      pCur->pV
32bc0 74 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61  tabCursor = pVta
32bd0 62 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70  bCursor;.      p
32be0 56 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20  Vtab->nRef++;.  
32bf0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
32c00 73 73 65 72 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f  ssert( db->mallo
32c10 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20  cFailed );.     
32c20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65   pModule->xClose
32c30 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  (pVtabCursor);. 
32c40 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
32c50 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
32c60 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
32c70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
32c80 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
32c90 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
32ca0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
32cb0 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65  * Opcode: VFilte
32cc0 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  r P1 P2 P3 P4 *.
32cd0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c  ** Synopsis: ipl
32ce0 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27  an=r[P3] zplan='
32cf0 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P4'.**.** P1 is 
32d00 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  a cursor opened 
32d10 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32  using VOpen.  P2
32d20 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74   is an address t
32d30 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20  o jump to if.** 
32d40 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73  the filtered res
32d50 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
32d60 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69  ..**.** P4 is ei
32d70 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73  ther NULL or a s
32d80 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67  tring that was g
32d90 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20  enerated by the 
32da0 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65  xBestIndex.** me
32db0 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
32dc0 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72  le.  The interpr
32dd0 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50  etation of the P
32de0 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74  4 string is left
32df0 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  .** to the modul
32e00 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
32e10 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
32e20 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
32e30 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f  xFilter method o
32e40 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
32e50 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  ble specified.**
32e60 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74   by P1.  The int
32e70 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20  eger query plan 
32e80 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69  parameter to xFi
32e90 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69  lter is stored i
32ea0 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  n register.** P3
32eb0 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20  . Register P3+1 
32ec0 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20  stores the argc 
32ed0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20  parameter to be 
32ee0 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a  passed to the.**
32ef0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e   xFilter method.
32f00 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e   Registers P3+2.
32f10 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74  .P3+1+argc are t
32f20 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74  he argc.** addit
32f30 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73  ional parameters
32f40 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65   which are passe
32f50 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20  d to.** xFilter 
32f60 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65  as argv. Registe
32f70 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61  r P3+2 becomes a
32f80 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73  rgv[0] when pass
32f90 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a  ed to xFilter..*
32fa0 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d  *.** A jump is m
32fb0 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65  ade to P2 if the
32fc0 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65   result set afte
32fd0 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c  r filtering woul
32fe0 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63  d be empty..*/.c
32ff0 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20  ase OP_VFilter: 
33000 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
33010 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
33020 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74   iQuery;.  const
33030 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
33040 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
33050 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a  *pQuery;.  Mem *
33060 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33  pArgc;.  sqlite3
33070 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
33080 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c  tabCursor;.  sql
33090 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
330a0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
330b0 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  pCur;.  int res;
330c0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
330d0 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65  **apArg;..  pQue
330e0 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ry = &aMem[pOp->
330f0 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26  p3];.  pArgc = &
33100 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75  pQuery[1];.  pCu
33110 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
33120 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
33130 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65   memIsValid(pQue
33140 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ry) );.  REGISTE
33150 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
33160 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65   pQuery);.  asse
33170 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
33180 75 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62  ursor );.  pVtab
33190 43 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70  Cursor = pCur->p
331a0 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56  VtabCursor;.  pV
331b0 74 61 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f  tab = pVtabCurso
331c0 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
331d0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
331e0 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62  dule;..  /* Grab
331f0 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65   the index numbe
33200 72 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d  r and argc param
33210 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72  eters */.  asser
33220 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67  t( (pQuery->flag
33230 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26  s&MEM_Int)!=0 &&
33240 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d   pArgc->flags==M
33250 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67  EM_Int );.  nArg
33260 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75   = (int)pArgc->u
33270 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28  .i;.  iQuery = (
33280 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b  int)pQuery->u.i;
33290 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
332a0 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
332b0 20 2a 2f 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   */.  res = 0;. 
332c0 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72   apArg = p->apAr
332d0 67 3b 0a 20 20 66 6f 72 28 69 20 3d 20 30 3b 20  g;.  for(i = 0; 
332e0 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
332f0 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41    apArg[i] = &pA
33300 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20  rgc[i+1];.  }.  
33310 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
33320 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f  ilter(pVtabCurso
33330 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
33340 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
33350 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  g);.  sqlite3Vta
33360 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
33370 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72   pVtab);.  if( r
33380 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
33390 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
333a0 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72  e->xEof(pVtabCur
333b0 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 70 43 75 72  sor);.  }.  pCur
333c0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
333d0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
333e0 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
333f0 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
33400 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
33410 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
33420 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
33430 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
33440 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
33450 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
33460 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50  pcode: VColumn P
33470 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
33480 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76  ynopsis: r[P3]=v
33490 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a  column(P2).**.**
334a0 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65   Store the value
334b0 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f   of the P2-th co
334c0 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72  lumn of.** the r
334d0 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  ow of the virtua
334e0 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  l-table that the
334f0 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69   .** P1 cursor i
33500 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e  s pointing to in
33510 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
33520 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75  */.case OP_VColu
33530 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  mn: {.  sqlite3_
33540 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
33550 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
33560 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
33570 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71  Mem *pDest;.  sq
33580 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43  lite3_context sC
33590 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43  ontext;..  VdbeC
335a0 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d  ursor *pCur = p-
335b0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
335c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
335d0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
335e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
335f0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
33600 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
33610 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20  sor) );.  pDest 
33620 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
33630 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
33640 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
33650 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
33660 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Row ){.    sqlit
33670 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
33680 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65  (pDest);.    bre
33690 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
336a0 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
336b0 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
336c0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
336d0 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
336e0 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  ( pModule->xColu
336f0 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26  mn );.  memset(&
33700 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a  sContext, 0, siz
33710 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a  eof(sContext));.
33720 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75 74 20    sContext.pOut 
33730 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d 53 65  = pDest;.  MemSe
33740 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
33750 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72 63   MEM_Null);.  rc
33760 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c   = pModule->xCol
33770 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61 62 43  umn(pCur->pVtabC
33780 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74  ursor, &sContext
33790 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71  , pOp->p2);.  sq
337a0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
337b0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
337c0 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e  .  if( sContext.
337d0 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72  isError ){.    r
337e0 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  c = sContext.isE
337f0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rror;.  }.  sqli
33800 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
33810 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65 6e 63  oding(pDest, enc
33820 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54  oding);.  REGIST
33830 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
33840 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41  , pDest);.  UPDA
33850 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
33860 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73  pDest);..  if( s
33870 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
33880 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20  Big(pDest) ){.  
33890 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
338a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
338b0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
338c0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
338d0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
338e0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
338f0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
33900 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20  : VNext P1 P2 * 
33910 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63  * *.**.** Advanc
33920 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
33930 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72  P1 to the next r
33940 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74  ow in its result
33950 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70   set and.** jump
33960 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
33970 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20  P2.  Or, if the 
33980 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61  virtual table ha
33990 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65  s reached.** the
339a0 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75   end of its resu
339b0 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c  lt set, then fal
339c0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
339d0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
339e0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e  n..*/.case OP_VN
339f0 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70  ext: {   /* jump
33a00 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
33a10 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
33a20 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
33a30 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  e *pModule;.  in
33a40 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72  t res;.  VdbeCur
33a50 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65  sor *pCur;..  re
33a60 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20  s = 0;.  pCur = 
33a70 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
33a80 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
33a90 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
33aa0 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
33ab0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65  llRow ){.    bre
33ac0 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
33ad0 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
33ae0 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
33af0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
33b00 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
33b10 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74  ( pModule->xNext
33b20 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65   );..  /* Invoke
33b30 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74   the xNext() met
33b40 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
33b50 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77  e. There is no w
33b60 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ay for the.  ** 
33b70 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65  underlying imple
33b80 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74  mentation to ret
33b90 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20  urn an error if 
33ba0 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e  one occurs durin
33bb0 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20  g.  ** xNext(). 
33bc0 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65  Instead, if an e
33bd0 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75  rror occurs, tru
33be0 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69  e is returned (i
33bf0 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a  ndicating that .
33c00 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61    ** data is ava
33c10 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20  ilable) and the 
33c20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72  error code retur
33c30 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e  ned when xColumn
33c40 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74   or.  ** some ot
33c50 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65  her method is ne
33c60 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68  xt invoked on th
33c70 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74  e save virtual t
33c80 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a  able cursor..  *
33c90 2f 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  /.  rc = pModule
33ca0 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70 56  ->xNext(pCur->pV
33cb0 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71  tabCursor);.  sq
33cc0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
33cd0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
33ce0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
33cf0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20  E_OK ){.    res 
33d00 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
33d10 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
33d20 72 29 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72  r);.  }.  VdbeBr
33d30 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32  anchTaken(!res,2
33d40 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b  );.  if( !res ){
33d50 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
33d60 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74   is data, jump t
33d70 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  o P2 */.    goto
33d80 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f   jump_to_p2_and_
33d90 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
33da0 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  upt;.  }.  goto 
33db0 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
33dc0 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  upt;.}.#endif /*
33dd0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
33de0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
33df0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
33e00 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
33e10 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d  * Opcode: VRenam
33e20 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
33e30 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
33e40 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
33e50 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
33e60 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
33e70 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
33e80 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
33e90 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
33ea0 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  ng xRename metho
33eb0 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  d. The value.** 
33ec0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
33ed0 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
33ee0 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74  zName argument t
33ef0 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65  o the xRename me
33f00 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  thod..*/.case OP
33f10 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71  _VRename: {.  sq
33f20 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
33f30 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b  b;.  Mem *pName;
33f40 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ..  pVtab = pOp-
33f50 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62  >p4.pVtab->pVtab
33f60 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65  ;.  pName = &aMe
33f70 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
33f80 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f  sert( pVtab->pMo
33f90 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b  dule->xRename );
33fa0 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
33fb0 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a  Valid(pName) );.
33fc0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
33fd0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45  dOnly==0 );.  RE
33fe0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
33ff0 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20  ->p1, pName);.  
34000 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66  assert( pName->f
34010 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29  lags & MEM_Str )
34020 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
34030 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
34040 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63  _UTF8 );.  testc
34050 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
34060 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20  =SQLITE_UTF16BE 
34070 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
34080 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
34090 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72  E_UTF16LE );.  r
340a0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
340b0 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e  hangeEncoding(pN
340c0 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  ame, SQLITE_UTF8
340d0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
340e0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
340f0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
34100 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62  e->xRename(pVtab
34110 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20  , pName->z);.   
34120 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
34130 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
34140 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  b);.    p->expir
34150 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72  ed = 0;.  }.  br
34160 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
34170 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
34180 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
34190 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61  /* Opcode: VUpda
341a0 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
341b0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64  5.** Synopsis: d
341c0 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a  ata=r[P3@P2].**.
341d0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
341e0 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
341f0 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
34200 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
34210 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
34220 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
34230 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
34240 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  g xUpdate method
34250 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61  . P2 values.** a
34260 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65  re contiguous me
34270 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74  mory cells start
34280 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73  ing at P3 to pas
34290 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65  s to the xUpdate
342a0 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e   .** invocation.
342b0 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   The value in re
342c0 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29  gister (P3+P2-1)
342d0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
342e0 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65  the .** p2th ele
342f0 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76  ment of the argv
34300 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f   array passed to
34310 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20   xUpdate..**.** 
34320 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68  The xUpdate meth
34330 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c  od will do a DEL
34340 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54  ETE or an INSERT
34350 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65   or both..** The
34360 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74   argv[0] element
34370 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f   (which correspo
34380 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65  nds to memory ce
34390 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65  ll P3).** is the
343a0 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20   rowid of a row 
343b0 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61  to delete.  If a
343c0 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74  rgv[0] is NULL t
343d0 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74  hen no .** delet
343e0 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65  ion occurs.  The
343f0 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74   argv[1] element
34400 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
34410 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
34420 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e  .  This can be N
34430 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20  ULL to have the 
34440 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65  virtual table se
34450 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a  lect the new .**
34460 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c   rowid for itsel
34470 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65  f.  The subseque
34480 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74  nt elements in t
34490 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a  he array are .**
344a0 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63   the values of c
344b0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65  olumns in the ne
344c0 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  w row..**.** If 
344d0 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e  P2==1 then no in
344e0 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65  sert is performe
344f0 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74  d.  argv[0] is t
34500 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61  he rowid of.** a
34510 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a   row to delete..
34520 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f  **.** P1 is a bo
34530 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69  olean flag. If i
34540 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65  t is set to true
34550 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65   and the xUpdate
34560 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63   call.** is succ
34570 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65  essful, then the
34580 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
34590 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  by sqlite3_last_
345a0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a  insert_rowid() .
345b0 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  ** is set to the
345c0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
345d0 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20  wid for the row 
345e0 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a  just inserted..*
345f0 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65 20 65  *.** P5 is the e
34600 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28 4f 45  rror actions (OE
34610 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69  _Replace, OE_Fai
34620 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74  l, OE_Ignore, et
34630 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69  c) to.** apply i
34640 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20  n the case of a 
34650 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 75  constraint failu
34660 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20  re on an insert 
34670 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61  or update..*/.ca
34680 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b  se OP_VUpdate: {
34690 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
346a0 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
346b0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
346c0 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e  pModule;.  int n
346d0 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Arg;.  int i;.  
346e0 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77  sqlite_int64 row
346f0 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72  id;.  Mem **apAr
34700 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20  g;.  Mem *pX;.. 
34710 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
34720 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70 4f  ==1        || pO
34730 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20  p->p5==OE_Fail  
34740 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
34750 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20 20  Rollback .      
34760 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
34770 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35  Abort || pOp->p5
34780 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70  ==OE_Ignore || p
34790 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61  Op->p5==OE_Repla
347a0 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74  ce.  );.  assert
347b0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
347c0 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f   );.  pVtab = pO
347d0 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
347e0 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62 3d  ab;.  if( pVtab=
347f0 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74 61  =0 || NEVER(pVta
34800 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29  b->pModule==0) )
34810 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
34820 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 62 72  E_LOCKED;.    br
34830 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75  eak;.  }.  pModu
34840 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
34850 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f  ule;.  nArg = pO
34860 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
34870 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
34880 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41  _VTAB );.  if( A
34890 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78  LWAYS(pModule->x
348a0 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75  Update) ){.    u
348b0 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  8 vtabOnConflict
348c0 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e   = db->vtabOnCon
348d0 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67  flict;.    apArg
348e0 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20   = p->apArg;.   
348f0 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d   pX = &aMem[pOp-
34900 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  >p3];.    for(i=
34910 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
34920 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
34930 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b  emIsValid(pX) );
34940 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
34950 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a  oChange(p, pX);.
34960 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d        apArg[i] =
34970 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b   pX;.      pX++;
34980 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76  .    }.    db->v
34990 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20  tabOnConflict = 
349a0 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20  pOp->p5;.    rc 
349b0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61  = pModule->xUpda
349c0 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20  te(pVtab, nArg, 
349d0 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a  apArg, &rowid);.
349e0 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f      db->vtabOnCo
349f0 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e 43  nflict = vtabOnC
34a00 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c  onflict;.    sql
34a10 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
34a20 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
34a30 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
34a40 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31  TE_OK && pOp->p1
34a50 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
34a60 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72  ( nArg>1 && apAr
34a70 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30  g[0] && (apArg[0
34a80 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c  ]->flags&MEM_Nul
34a90 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  l) );.      db->
34aa0 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
34ab0 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20  Rowid = rowid;. 
34ac0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63     }.    if( (rc
34ad0 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43  &0xff)==SQLITE_C
34ae0 4f 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70  ONSTRAINT && pOp
34af0 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e  ->p4.pVtab->bCon
34b00 73 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20  straint ){.     
34b10 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45   if( pOp->p5==OE
34b20 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20  _Ignore ){.     
34b30 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
34b40 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  K;.      }else{.
34b50 20 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72          p->error
34b60 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e  Action = ((pOp->
34b70 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20  p5==OE_Replace) 
34b80 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70  ? OE_Abort : pOp
34b90 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ->p5);.      }. 
34ba0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
34bb0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
34bc0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
34bd0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
34be0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
34bf0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
34c00 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  f  SQLITE_OMIT_P
34c10 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20  AGER_PRAGMAS./* 
34c20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e  Opcode: Pagecoun
34c30 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
34c40 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75  .** Write the cu
34c50 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20  rrent number of 
34c60 70 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73  pages in databas
34c70 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63  e P1 to memory c
34c80 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ell P2..*/.case 
34c90 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20  OP_Pagecount: { 
34ca0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
34cb0 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
34cc0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
34cd0 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
34ce0 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  .i = sqlite3Btre
34cf0 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44  eLastPage(db->aD
34d00 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b  b[pOp->p1].pBt);
34d10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
34d20 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51  if...#ifndef  SQ
34d30 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
34d40 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64  PRAGMAS./* Opcod
34d50 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50  e: MaxPgcnt P1 P
34d60 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
34d70 72 79 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61  ry to set the ma
34d80 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
34d90 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
34da0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
34db0 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c   P3..** Do not l
34dc0 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  et the maximum p
34dd0 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62  age count fall b
34de0 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74  elow the current
34df0 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a   page count and.
34e00 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65  ** do not change
34e10 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
34e20 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66  e count value if
34e30 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74   P3==0..**.** St
34e40 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ore the maximum 
34e50 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72  page count after
34e60 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72   the change in r
34e70 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
34e80 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a  ase OP_MaxPgcnt:
34e90 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
34ea0 20 6f 75 74 32 20 2a 2f 0a 20 20 75 6e 73 69 67   out2 */.  unsig
34eb0 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a  ned int newMax;.
34ec0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
34ed0 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
34ee0 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
34ef0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
34f00 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
34f10 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66  newMax = 0;.  if
34f20 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
34f30 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65   newMax = sqlite
34f40 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 70  3BtreeLastPage(p
34f50 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77  Bt);.    if( new
34f60 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29  Max < (unsigned)
34f70 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78  pOp->p3 ) newMax
34f80 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70   = (unsigned)pOp
34f90 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  ->p3;.  }.  pOut
34fa0 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42  ->u.i = sqlite3B
34fb0 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74  treeMaxPageCount
34fc0 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20  (pBt, newMax);. 
34fd0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
34fe0 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  .../* Opcode: In
34ff0 69 74 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  it * P2 * P4 *.*
35000 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 53 74 61  * Synopsis:  Sta
35010 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50  rt at P2.**.** P
35020 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e 20  rograms contain 
35030 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63  a single instanc
35040 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  e of this opcode
35050 20 61 73 20 74 68 65 20 76 65 72 79 20 66 69 72   as the very fir
35060 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a  st.** opcode..**
35070 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69  .** If tracing i
35080 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68  s enabled (by th
35090 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  e sqlite3_trace(
350a0 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68  )) interface, th
350b0 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20  en.** the UTF-8 
350c0 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64  string contained
350d0 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65   in P4 is emitte
350e0 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63  d on the trace c
350f0 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69  allback..** Or i
35100 66 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20 75  f P4 is blank, u
35110 73 65 20 74 68 65 20 73 74 72 69 6e 67 20 72 65  se the string re
35120 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
35130 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  3_sql()..**.** I
35140 66 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P2 is not zero
35150 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
35160 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ction P2..*/.cas
35170 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20 20  e OP_Init: {    
35180 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
35190 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b  .  char *zTrace;
351a0 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 23 69 66  .  char *z;..#if
351b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
351c0 5f 54 52 41 43 45 0a 20 20 69 66 28 20 64 62 2d  _TRACE.  if( db-
351d0 3e 78 54 72 61 63 65 0a 20 20 20 26 26 20 21 70  >xTrace.   && !p
351e0 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20  ->doingRerun.   
351f0 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f  && (zTrace = (pO
35200 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
35210 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21  4.z : p->zSql))!
35220 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20  =0.  ){.    z = 
35230 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e  sqlite3VdbeExpan
35240 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b  dSql(p, zTrace);
35250 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28  .    db->xTrace(
35260 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a  db->pTraceArg, z
35270 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  );.    sqlite3Db
35280 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d  Free(db, z);.  }
35290 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
352a0 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a 20  SE_FCNTL_TRACE. 
352b0 20 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e   zTrace = (pOp->
352c0 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a  p4.z ? pOp->p4.z
352d0 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69   : p->zSql);.  i
352e0 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20  f( zTrace ){.   
352f0 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28   int i;.    for(
35300 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
35310 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
35320 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
35330 72 65 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20 29  reeMask, i)==0 )
35340 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
35350 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
35360 6e 74 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61 44  ntrol(db, db->aD
35370 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49  b[i].zName, SQLI
35380 54 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c 20  TE_FCNTL_TRACE, 
35390 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20  zTrace);.    }. 
353a0 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
353b0 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52  ITE_USE_FCNTL_TR
353c0 41 43 45 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ACE */.#ifdef SQ
353d0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
353e0 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
353f0 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d  LITE_SqlTrace)!=
35400 30 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20  0.   && (zTrace 
35410 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70  = (pOp->p4.z ? p
35420 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53  Op->p4.z : p->zS
35430 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  ql))!=0.  ){.   
35440 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
35450 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20  ntf("SQL-trace: 
35460 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a  %s\n", zTrace);.
35470 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
35480 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65  LITE_DEBUG */.#e
35490 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
354a0 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20 69  MIT_TRACE */.  i
354b0 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74  f( pOp->p2 ) got
354c0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
354d0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
354e0 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a  code: Noop * * *
354f0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f   * *.**.** Do no
35500 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73  thing.  This ins
35510 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65  truction is ofte
35520 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75  n useful as a ju
35530 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f  mp.** destinatio
35540 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20  n..*/./*.** The 
35550 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70  magic Explain op
35560 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e  code are only in
35570 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c  serted when expl
35580 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a  ain==2 (which.**
35590 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20   is to say when 
355a0 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
355b0 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73  Y PLAN syntax is
355c0 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20   used.).** This 
355d0 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69  opcode records i
355e0 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
355f0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20  the optimizer.  
35600 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65  It is the.** the
35610 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70   same as a no-op
35620 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e  .  This opcodesn
35630 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20  ever appears in 
35640 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61  a real VM progra
35650 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b  m..*/.default: {
35660 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69            /* Thi
35670 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e  s is really OP_N
35680 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61  oop and OP_Expla
35690 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  in */.  assert( 
356a0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
356b0 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Noop || pOp->opc
356c0 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20  ode==OP_Explain 
356d0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
356e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
356f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35720 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
35730 20 54 68 65 20 63 61 73 65 73 20 6f 66 20 74 68   The cases of th
35740 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
35750 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69  nt above this li
35760 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65  ne should all be
35770 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20   indented.** by 
35780 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 20 74  6 spaces.  But t
35790 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73  he left-most 6 s
357a0 70 61 63 65 73 20 68 61 76 65 20 62 65 65 6e 20  paces have been 
357b0 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f  removed to impro
357c0 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62  ve the.** readab
357d0 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69  ility.  From thi
357e0 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c  s point on down,
357f0 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65   the normal inde
35800 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72  ntation rules ar
35810 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a  e.** restored..*
35820 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35830 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35840 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20  ************/.  
35870 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45    }..#ifdef VDBE
35880 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20  _PROFILE.    {. 
35890 20 20 20 20 20 75 36 34 20 65 6e 64 54 69 6d 65       u64 endTime
358a0 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
358b0 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20 65 6e  ();.      if( en
358c0 64 54 69 6d 65 3e 73 74 61 72 74 20 29 20 70 4f  dTime>start ) pO
358d0 72 69 67 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d  rigOp->cycles +=
358e0 20 65 6e 64 54 69 6d 65 20 2d 20 73 74 61 72 74   endTime - start
358f0 3b 0a 20 20 20 20 20 20 70 4f 72 69 67 4f 70 2d  ;.      pOrigOp-
35900 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65  >cnt++;.    }.#e
35910 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65  ndif..    /* The
35920 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20   following code 
35930 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20  adds nothing to 
35940 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74  the actual funct
35950 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20  ionality.    ** 
35960 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  of the program. 
35970 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65   It is only here
35980 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64   for testing and
35990 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20   debugging..    
359a0 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20  ** On the other 
359b0 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75  hand, it does bu
359c0 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20 65 76  rn CPU cycles ev
359d0 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68  ery time through
359e0 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c  .    ** the eval
359f0 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20  uator loop.  So 
35a00 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20  we can leave it 
35a10 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20  out when NDEBUG 
35a20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20  is defined..    
35a30 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  */.#ifndef NDEBU
35a40 47 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  G.    assert( pO
35a50 70 3e 3d 26 61 4f 70 5b 2d 31 5d 20 26 26 20 70  p>=&aOp[-1] && p
35a60 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 2d 31  Op<&aOp[p->nOp-1
35a70 5d 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  ] );..#ifdef SQL
35a80 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
35a90 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ( db->flags & SQ
35aa0 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29  LITE_VdbeTrace )
35ab0 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  {.      if( rc!=
35ac0 30 20 29 20 70 72 69 6e 74 66 28 22 72 63 3d 25  0 ) printf("rc=%
35ad0 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20  d\n",rc);.      
35ae0 69 66 28 20 70 4f 72 69 67 4f 70 2d 3e 6f 70 66  if( pOrigOp->opf
35af0 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55  lags & (OPFLG_OU
35b00 54 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  T2) ){.        r
35b10 65 67 69 73 74 65 72 54 72 61 63 65 28 70 4f 72  egisterTrace(pOr
35b20 69 67 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  igOp->p2, &aMem[
35b30 70 4f 72 69 67 4f 70 2d 3e 70 32 5d 29 3b 0a 20  pOrigOp->p2]);. 
35b40 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
35b50 20 70 4f 72 69 67 4f 70 2d 3e 6f 70 66 6c 61 67   pOrigOp->opflag
35b60 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29  s & OPFLG_OUT3 )
35b70 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74  {.        regist
35b80 65 72 54 72 61 63 65 28 70 4f 72 69 67 4f 70 2d  erTrace(pOrigOp-
35b90 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 72 69 67  >p3, &aMem[pOrig
35ba0 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20  Op->p3]);.      
35bb0 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20  }.    }.#endif  
35bc0 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
35bd0 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44  */.#endif  /* ND
35be0 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20  EBUG */.  }  /* 
35bf0 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66  The end of the f
35c00 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20  or(;;) loop the 
35c10 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70  loops through op
35c20 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  codes */..  /* I
35c30 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20  f we reach this 
35c40 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20  point, it means 
35c50 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69  that execution i
35c60 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a  s finished with.
35c70 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66    ** an error of
35c80 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f   some kind..  */
35c90 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74  .vdbe_error_halt
35ca0 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20 29  :.  assert( rc )
35cb0 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a  ;.  p->rc = rc;.
35cc0 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69    testcase( sqli
35cd0 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
35ce0 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c  xLog!=0 );.  sql
35cf0 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74  ite3_log(rc, "st
35d00 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20 61  atement aborts a
35d10 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20  t %d: [%s] %s", 
35d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35d30 20 20 20 20 28 69 6e 74 29 28 70 4f 70 20 2d 20      (int)(pOp - 
35d40 61 4f 70 29 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70  aOp), p->zSql, p
35d50 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71  ->zErrMsg);.  sq
35d60 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
35d70 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
35d80 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
35d90 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
35da0 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51  d = 1;.  rc = SQ
35db0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66  LITE_ERROR;.  if
35dc0 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  ( resetSchemaOnF
35dd0 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20 73 71  ault>0 ){.    sq
35de0 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
35df0 65 6d 61 28 64 62 2c 20 72 65 73 65 74 53 63 68  ema(db, resetSch
35e00 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a 20  emaOnFault-1);. 
35e10 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73   }..  /* This is
35e20 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75   the only way ou
35e30 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64  t of this proced
35e40 75 72 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f  ure.  We have to
35e50 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68  .  ** release th
35e60 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72  e mutexes on btr
35e70 65 65 73 20 74 68 61 74 20 77 65 72 65 20 61 63  ees that were ac
35e80 71 75 69 72 65 64 20 61 74 20 74 68 65 0a 20 20  quired at the.  
35e90 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f  ** top. */.vdbe_
35ea0 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61  return:.  db->la
35eb0 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
35ec0 77 69 64 3b 0a 20 20 74 65 73 74 63 61 73 65 28  wid;.  testcase(
35ed0 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b 0a 20 20   nVmStep>0 );.  
35ee0 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
35ef0 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d  TE_STMTSTATUS_VM
35f00 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e 74 29 6e  _STEP] += (int)n
35f10 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c 69 74 65  VmStep;.  sqlite
35f20 33 56 64 62 65 4c 65 61 76 65 28 70 29 3b 0a 20  3VdbeLeave(p);. 
35f30 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f   return rc;..  /
35f40 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
35f50 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  f a string or bl
35f60 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53  ob larger than S
35f70 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
35f80 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74  .  ** is encount
35f90 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62  ered..  */.too_b
35fa0 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ig:.  sqlite3Vdb
35fb0 65 45 72 72 6f 72 28 70 2c 20 22 73 74 72 69 6e  eError(p, "strin
35fc0 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
35fd0 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  g");.  rc = SQLI
35fe0 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74  TE_TOOBIG;.  got
35ff0 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
36000 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
36010 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f   here if a mallo
36020 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a  c() fails..  */.
36030 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61  no_mem:.  db->ma
36040 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
36050 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
36060 6f 72 28 70 2c 20 22 6f 75 74 20 6f 66 20 6d 65  or(p, "out of me
36070 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53  mory");.  rc = S
36080 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67  QLITE_NOMEM;.  g
36090 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
360a0 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
360b0 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20  to here for any 
360c0 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61  other kind of fa
360d0 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20  tal error.  The 
360e0 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20  "rc" variable.  
360f0 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74  ** should hold t
36100 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e  he error number.
36110 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
36120 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65  to_error:.  asse
36130 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d  rt( p->zErrMsg==
36140 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d  0 );.  if( db->m
36150 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63  allocFailed ) rc
36160 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
36170 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
36180 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b  E_IOERR_NOMEM ){
36190 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
361a0 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73  Error(p, "%s", s
361b0 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
361c0 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64  );.  }.  goto vd
361d0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a  be_error_halt;..
361e0 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
361f0 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33  e if the sqlite3
36200 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49  _interrupt() API
36210 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72   sets the interr
36220 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20  upt.  ** flag.. 
36230 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
36240 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73  _interrupt:.  as
36250 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49  sert( db->u1.isI
36260 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20  nterrupted );.  
36270 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
36280 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d  RRUPT;.  p->rc =
36290 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 56 64   rc;.  sqlite3Vd
362a0 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
362b0 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
362c0 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  c));.  goto vdbe
362d0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a     _error_halt;.}.