/ Hex Artifact Content
Login

Artifact b9e6866e43a61ca4080410f27c4bb52823495186:


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 2f 0a 23 69 66 20 21 64  taken..*/.#if !d
1090: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44  efined(SQLITE_VD
10a0: 42 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64  BE_COVERAGE).# d
10b0: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
10c0: 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65  Taken(I,M).#else
10d0: 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72  .# define VdbeBr
10e0: 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76  anchTaken(I,M) v
10f0: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f  dbeTakeBranch(pO
1100: 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29  p->iSrcLine,I,M)
1110: 0a 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76  .  static void v
1120: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e  dbeTakeBranch(in
1130: 74 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49  t iSrcLine, u8 I
1140: 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28  , u8 M){.    if(
1150: 20 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20   iSrcLine<=2 && 
1160: 41 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e  ALWAYS(iSrcLine>
1170: 30 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20  0) ){.      M = 
1180: 69 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20  iSrcLine;.      
1190: 2f 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72  /* Assert the tr
11a0: 75 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72  uth of VdbeCover
11b0: 61 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29  ageAlwaysTaken()
11c0: 20 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56   and .      ** V
11d0: 64 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72  dbeCoverageNever
11e0: 54 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20  Taken() */.     
11f0: 20 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29   assert( (M & I)
1200: 3d 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==I );.    }else
1210: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
1220: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1230: 78 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29  xVdbeBranch==0 )
1240: 20 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54   return;  /*NO_T
1250: 45 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  EST*/.      sqli
1260: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1270: 78 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69  xVdbeBranch(sqli
1280: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1290: 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a  pVdbeBranchArg,.
12a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c0: 20 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49        iSrcLine,I
12d0: 2c 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  ,M);.    }.  }.#
12e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  endif../*.** Con
12f0: 76 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72  vert the given r
1300: 65 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73  egister into a s
1310: 74 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27  tring if it isn'
1320: 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79  t one.** already
1330: 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72  . Return non-zer
1340: 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  o if a malloc() 
1350: 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  fails..*/.#defin
1360: 65 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65  e Stringify(P, e
1370: 6e 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29  nc) \.   if(((P)
1380: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72  ->flags&(MEM_Str
1390: 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26  |MEM_Blob))==0 &
13a0: 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  & sqlite3VdbeMem
13b0: 53 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 29  Stringify(P,enc)
13c0: 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20  ) \.     { goto 
13d0: 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a  no_mem; }../*.**
13e0: 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74   An ephemeral st
13f0: 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e  ring value (sign
1400: 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d  ified by the MEM
1410: 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e  _Ephem flag) con
1420: 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74  tains.** a point
1430: 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61  er to a dynamica
1440: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74  lly allocated st
1450: 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20  ring where some 
1460: 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20  other entity.** 
1470: 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  is responsible f
1480: 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  or deallocating 
1490: 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65  that string.  Be
14a0: 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74  cause the regist
14b0: 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63  er.** does not c
14c0: 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e  ontrol the strin
14d0: 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64  g, it might be d
14e0: 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74  eleted without t
14f0: 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b  he register.** k
1500: 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a  nowing it..**.**
1510: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f   This routine co
1520: 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65  nverts an epheme
1530: 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20  ral string into 
1540: 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  a dynamically al
1550: 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e  located.** strin
1560: 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73  g that the regis
1570: 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72  ter itself contr
1580: 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ols.  In other w
1590: 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76  ords, it.** conv
15a0: 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65  erts an MEM_Ephe
15b0: 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  m string into a 
15c0: 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d  string with P.z=
15d0: 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23  =P.zMalloc..*/.#
15e0: 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72  define Deephemer
15f0: 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66  alize(P) \.   if
1600: 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45  ( ((P)->flags&ME
1610: 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20  M_Ephem)!=0 \.  
1620: 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56       && sqlite3V
1630: 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61  dbeMemMakeWritea
1640: 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e  ble(P) ){ goto n
1650: 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75  o_mem;}../* Retu
1660: 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63  rn true if the c
1670: 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64  ursor was opened
1680: 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70   using the OP_Op
1690: 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e  enSorter opcode.
16a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f   */.#define isSo
16b0: 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53  rter(x) ((x)->pS
16c0: 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a  orter!=0)../*.**
16d0: 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75   Allocate VdbeCu
16e0: 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72  rsor number iCur
16f0: 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e  .  Return a poin
1700: 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75  ter to it.  Retu
1710: 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65  rn NULL.** if we
1720: 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f   run out of memo
1730: 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64  ry..*/.static Vd
1740: 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61  beCursor *alloca
1750: 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65  teCursor(.  Vdbe
1760: 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20   *p,            
1770: 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c    /* The virtual
1780: 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e   machine */.  in
1790: 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20  t iCur,         
17a0: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
17b0: 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73  the new VdbeCurs
17c0: 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  or */.  int nFie
17d0: 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ld,           /*
17e0: 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   Number of field
17f0: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  s in the table o
1800: 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  r index */.  int
1810: 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20   iDb,           
1820: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74     /* Database t
1830: 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67  he cursor belong
1840: 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20  s to, or -1 */. 
1850: 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72 73   int isBtreeCurs
1860: 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66  or     /* True f
1870: 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c 73  or B-Tree.  Fals
1880: 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62  e for pseudo-tab
1890: 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29 7b  le or vtab */.){
18a0: 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d  .  /* Find the m
18b0: 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
18c0: 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20  will be used to 
18d0: 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20 6f  store the blob o
18e0: 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65  f memory.  ** re
18f0: 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20  quired for this 
1900: 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63  VdbeCursor struc
1910: 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e 76  ture. It is conv
1920: 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61 20  enient to use a 
1930: 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72  .  ** vdbe memor
1940: 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65  y cell to manage
1950: 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f   the memory allo
1960: 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64 20  cation required 
1970: 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65 43  for a.  ** VdbeC
1980: 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 20  ursor structure 
1990: 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  for the followin
19a0: 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a  g reasons:.  **.
19b0: 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d    **   * Sometim
19c0: 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  es cursor number
19d0: 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61  s are used for a
19e0: 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66 65   couple of diffe
19f0: 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70 75  rent.  **     pu
1a00: 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62 65  rposes in a vdbe
1a10: 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64 69   program. The di
1a20: 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69 67  fferent uses mig
1a30: 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a 20  ht require.  ** 
1a40: 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73 69      different si
1a50: 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e  zed allocations.
1a60: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72   Memory cells pr
1a70: 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a 20  ovide growable. 
1a80: 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74 69   **     allocati
1a90: 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  ons..  **.  **  
1aa0: 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45 4e   * When using EN
1ab0: 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41  ABLE_MEMORY_MANA
1ac0: 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63  GEMENT, memory c
1ad0: 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e 0a  ell buffers can.
1ae0: 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65 65    **     be free
1af0: 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68 65  d lazily via the
1b00: 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65   sqlite3_release
1b10: 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20 54  _memory() API. T
1b20: 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e  his.  **     min
1b30: 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62 65  imizes the numbe
1b40: 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c  r of malloc call
1b50: 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73 79  s made by the sy
1b60: 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  stem..  **.  ** 
1b70: 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72  Memory cells for
1b80: 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 6c   cursors are all
1b90: 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74 6f  ocated at the to
1ba0: 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73 73  p of the address
1bb0: 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65 6d  .  ** space. Mem
1bc0: 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65  ory cell (p->nMe
1bd0: 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  m) corresponds t
1be0: 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61 63  o cursor 0. Spac
1bf0: 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73 6f  e for.  ** curso
1c00: 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20 62  r 1 is managed b
1c10: 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  y memory cell (p
1c20: 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e 0a  ->nMem-1), etc..
1c30: 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d    */.  Mem *pMem
1c40: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e   = &p->aMem[p->n
1c50: 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69 6e  Mem-iCur];..  in
1c60: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1c70: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1c80: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1c90: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1ca0: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1cb0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1cc0: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42  ld + .      (isB
1cd0: 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74  treeCursor?sqlit
1ce0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a  e3BtreeCursorSiz
1cf0: 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65 72  e():0);..  asser
1d00: 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73  t( iCur<p->nCurs
1d10: 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  or );.  if( p->a
1d20: 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20  pCsr[iCur] ){.  
1d30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
1d40: 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
1d50: 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20  Csr[iCur]);.    
1d60: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
1d70: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51   0;.  }.  if( SQ
1d80: 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33  LITE_OK==sqlite3
1d90: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d  VdbeMemGrow(pMem
1da0: 2c 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20  , nByte, 0) ){. 
1db0: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
1dc0: 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43  ] = pCx = (VdbeC
1dd0: 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a  ursor*)pMem->z;.
1de0: 20 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20      memset(pCx, 
1df0: 30 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75  0, sizeof(VdbeCu
1e00: 72 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d  rsor));.    pCx-
1e10: 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20  >iDb = iDb;.    
1e20: 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46  pCx->nField = nF
1e30: 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 69 73  ield;.    if( is
1e40: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1e50: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1e60: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1e70: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
1e80: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
1e90: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
1ea0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1eb0: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
1ec0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
1ed0: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
1ee0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
1ef0: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
1f00: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
1f10: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
1f20: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
1f30: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
1f40: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
1f50: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
1f60: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
1f70: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
1f80: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
1f90: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
1fa0: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
1fb0: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
1fc0: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
1fd0: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
1fe0: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
1ff0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
2000: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
2010: 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20  ty(Mem *pRec){. 
2020: 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a   double rValue;.
2030: 20 20 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20    i64 iValue;.  
2040: 75 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65  u8 enc = pRec->e
2050: 6e 63 3b 0a 20 20 69 66 28 20 28 70 52 65 63 2d  nc;.  if( (pRec-
2060: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d  >flags&MEM_Str)=
2070: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69  =0 ) return;.  i
2080: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
2090: 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c  Rec->z, &rValue,
20a0: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d   pRec->n, enc)==
20b0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66  0 ) return;.  if
20c0: 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69  ( 0==sqlite3Atoi
20d0: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61  64(pRec->z, &iVa
20e0: 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e  lue, pRec->n, en
20f0: 63 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e  c) ){.    pRec->
2100: 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20  u.i = iValue;.  
2110: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
2120: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73   MEM_Int;.  }els
2130: 65 7b 0a 20 20 20 20 70 52 65 63 2d 3e 72 20 3d  e{.    pRec->r =
2140: 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65   rValue;.    pRe
2150: 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  c->flags |= MEM_
2160: 52 65 61 6c 3b 0a 20 20 7d 0a 7d 0a 23 64 65 66  Real;.  }.}.#def
2170: 69 6e 65 20 41 70 70 6c 79 4e 75 6d 65 72 69 63  ine ApplyNumeric
2180: 41 66 66 69 6e 69 74 79 28 58 29 20 20 5c 0a 20  Affinity(X)  \. 
2190: 20 20 69 66 28 28 28 58 29 2d 3e 66 6c 61 67 73    if(((X)->flags
21a0: 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49  &(MEM_Real|MEM_I
21b0: 6e 74 29 29 3d 3d 30 29 7b 61 70 70 6c 79 4e 75  nt))==0){applyNu
21c0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29  mericAffinity(X)
21d0: 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73  ;}../*.** Proces
21e0: 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e  sing is determin
21f0: 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74  e by the affinit
2200: 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a  y parameter:.**.
2210: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ** SQLITE_AFF_IN
2220: 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45  TEGER:.** SQLITE
2230: 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51  _AFF_REAL:.** SQ
2240: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
2250: 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63  :.**    Try to c
2260: 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61  onvert pRec to a
2270: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2280: 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a  entation or a .*
2290: 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  *    floating-po
22a0: 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  int representati
22b0: 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72  on if an integer
22c0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a   representation.
22d0: 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73  **    is not pos
22e0: 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61  sible.  Note tha
22f0: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65  t the integer re
2300: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a  presentation is.
2310: 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65  **    always pre
2320: 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20  ferred, even if 
2330: 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20  the affinity is 
2340: 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a  REAL, because.**
2350: 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72      an integer r
2360: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2370: 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69   more space effi
2380: 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a  cient on disk..*
2390: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
23a0: 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76  TEXT:.**    Conv
23b0: 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65  ert pRec to a te
23c0: 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  xt representatio
23d0: 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  n..**.** SQLITE_
23e0: 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20  AFF_NONE:.**    
23f0: 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20  No-op.  pRec is 
2400: 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74  unchanged..*/.st
2410: 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41  atic void applyA
2420: 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a  ffinity(.  Mem *
2430: 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f  pRec,          /
2440: 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61  * The value to a
2450: 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f  pply affinity to
2460: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
2470: 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65  ity,      /* The
2480: 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20   affinity to be 
2490: 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20  applied */.  u8 
24a0: 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20  enc             
24b0: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78   /* Use this tex
24c0: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b  t encoding */.){
24d0: 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  .  if( affinity=
24e0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
24f0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
2500: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
2510: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
2520: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2530: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2540: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2550: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2560: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2570: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2580: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2590: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
25a0: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
25b0: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
25c0: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
25d0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
25e0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
25f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2600: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2610: 20 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20   enc);.    }.   
2620: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20   pRec->flags &= 
2630: 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49  ~(MEM_Real|MEM_I
2640: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  nt);.  }else if(
2650: 20 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49 54   affinity!=SQLIT
2660: 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20  E_AFF_NONE ){.  
2670: 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69    assert( affini
2680: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49  ty==SQLITE_AFF_I
2690: 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69  NTEGER || affini
26a0: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  ty==SQLITE_AFF_R
26b0: 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  EAL.            
26c0: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
26d0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
26e0: 20 29 3b 0a 20 20 20 20 41 70 70 6c 79 4e 75 6d   );.    ApplyNum
26f0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2700: 63 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63  c);.    if( pRec
2710: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
2720: 61 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  al ){.      sqli
2730: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
2740: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
2750: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
2760: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2770: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2780: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2790: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
27a0: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
27b0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
27c0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
27d0: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
27e0: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
27f0: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2800: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2810: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2820: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2830: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2840: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2850: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2860: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2870: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2880: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2890: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
28a0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
28b0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
28c0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
28d0: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
28e0: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
28f0: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2900: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2910: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2920: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a  Affinity(pMem);.
2930: 20 20 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69      eType = sqli
2940: 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70  te3_value_type(p
2950: 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  Val);.  }.  retu
2960: 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a  rn eType;.}../*.
2970: 2a 2a 20 45 78 70 6f 72 74 65 64 20 76 65 72 73  ** Exported vers
2980: 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69  ion of applyAffi
2990: 6e 69 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65  nity(). This one
29a0: 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65   works on sqlite
29b0: 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f  3_value*, .** no
29c0: 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d  t the internal M
29d0: 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69  em* type..*/.voi
29e0: 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
29f0: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73  plyAffinity(.  s
2a00: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
2a10: 61 6c 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69  al, .  u8 affini
2a20: 74 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b  ty, .  u8 enc.){
2a30: 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  .  applyAffinity
2a40: 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66  ((Mem *)pVal, af
2a50: 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a  finity, enc);.}.
2a60: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
2a70: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66  e numeric type f
2a80: 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20  or pMem, either 
2a90: 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52  MEM_Int or MEM_R
2aa0: 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a  eal or both or.*
2ab0: 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20  * none.  .**.** 
2ac0: 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65  Unlike applyNume
2ad0: 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74  ricAffinity(), t
2ae0: 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73  his routine does
2af0: 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d   not modify pMem
2b00: 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20  ->flags..** But 
2b10: 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d  it does set pMem
2b20: 2d 3e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e  ->r and pMem->u.
2b30: 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 2e  i appropriately.
2b40: 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20 6e  .*/.static u16 n
2b50: 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a  umericType(Mem *
2b60: 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70 4d 65  pMem){.  if( pMe
2b70: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
2b80: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 7b  Int|MEM_Real) ){
2b90: 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d  .    return pMem
2ba0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
2bb0: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  nt|MEM_Real);.  
2bc0: 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c  }.  if( pMem->fl
2bd0: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
2be0: 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20  EM_Blob) ){.    
2bf0: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28  if( sqlite3AtoF(
2c00: 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e  pMem->z, &pMem->
2c10: 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d  r, pMem->n, pMem
2c20: 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20  ->enc)==0 ){.   
2c30: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20     return 0;.   
2c40: 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74   }.    if( sqlit
2c50: 65 33 41 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a  e3Atoi64(pMem->z
2c60: 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d  , &pMem->u.i, pM
2c70: 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63  em->n, pMem->enc
2c80: 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )==SQLITE_OK ){.
2c90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d        return MEM
2ca0: 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _Int;.    }.    
2cb0: 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b  return MEM_Real;
2cc0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
2cd0: 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
2ce0: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72  E_DEBUG./*.** Wr
2cf0: 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e  ite a nice strin
2d00: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
2d10: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   of the contents
2d20: 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a   of cell pMem.**
2d30: 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75   into buffer zBu
2d40: 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a  f, length nBuf..
2d50: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
2d60: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
2d70: 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61  t(Mem *pMem, cha
2d80: 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72  r *zBuf){.  char
2d90: 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20   *zCsr = zBuf;. 
2da0: 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66   int f = pMem->f
2db0: 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20  lags;..  static 
2dc0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
2dd0: 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  t encnames[] = {
2de0: 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28  "(X)", "(8)", "(
2df0: 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22  16LE)", "(16BE)"
2e00: 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f  };..  if( f&MEM_
2e10: 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20  Blob ){.    int 
2e20: 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20  i;.    char c;. 
2e30: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
2e40: 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  yn ){.      c = 
2e50: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
2e60: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
2e70: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
2e80: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
2e90: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
2ea0: 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  ic ){.      c = 
2eb0: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
2ec0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
2ed0: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
2ee0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
2ef0: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
2f00: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b  {.      c = 'e';
2f10: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
2f20: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
2f30: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
2f40: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2f50: 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a   c = 's';.    }.
2f60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
2f70: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
2f80: 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a   "%c", c);.    z
2f90: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
2fa0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
2fb0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2fc0: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
2fd0: 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20  d[", pMem->n);. 
2fe0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
2ff0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3000: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
3010: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
3020: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71  ; i++){.      sq
3030: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3040: 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22  00, zCsr, "%02X"
3050: 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b  , ((int)pMem->z[
3060: 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20  i] & 0xFF));.   
3070: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3080: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3090: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28  ;.    }.    for(
30a0: 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70  i=0; i<16 && i<p
30b0: 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20  Mem->n; i++){.  
30c0: 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d 65      char z = pMe
30d0: 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69  m->z[i];.      i
30e0: 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36  f( z<32 || z>126
30f0: 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27   ) *zCsr++ = '.'
3100: 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a 43  ;.      else *zC
3110: 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a  sr++ = z;.    }.
3120: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3130: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
3140: 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65 73   "]%s", encnames
3150: 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20  [pMem->enc]);.  
3160: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
3170: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3180: 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d  .    if( f & MEM
3190: 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73  _Zero ){.      s
31a0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
31b0: 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22  100, zCsr,"+%dz"
31c0: 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b  ,pMem->u.nZero);
31d0: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
31e0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
31f0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3200: 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20  *zCsr = '\0';.  
3210: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3220: 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74  M_Str ){.    int
3230: 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b   j, k;.    zBuf[
3240: 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66  0] = ' ';.    if
3250: 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b  ( f & MEM_Dyn ){
3260: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3270: 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'z';.      asse
3280: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3290: 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  atic|MEM_Ephem))
32a0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
32b0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61   if( f & MEM_Sta
32c0: 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  tic ){.      zBu
32d0: 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20  f[1] = 't';.    
32e0: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
32f0: 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65  MEM_Dyn|MEM_Ephe
3300: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
3310: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3320: 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a  Ephem ){.      z
3330: 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20  Buf[1] = 'e';.  
3340: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3350: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3360: 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20  _Dyn))==0 );.   
3370: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42   }else{.      zB
3380: 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20  uf[1] = 's';.   
3390: 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20   }.    k = 2;.  
33a0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
33b0: 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d  tf(100, &zBuf[k]
33c0: 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29  , "%d", pMem->n)
33d0: 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74  ;.    k += sqlit
33e0: 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66  e3Strlen30(&zBuf
33f0: 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b  [k]);.    zBuf[k
3400: 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66  ++] = '[';.    f
3410: 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20  or(j=0; j<15 && 
3420: 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b  j<pMem->n; j++){
3430: 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d  .      u8 c = pM
3440: 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20  em->z[j];.      
3450: 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63  if( c>=0x20 && c
3460: 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20  <0x7f ){.       
3470: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a   zBuf[k++] = c;.
3480: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
3490: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
34a0: 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20   '.';.      }.  
34b0: 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b    }.    zBuf[k++
34c0: 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c  ] = ']';.    sql
34d0: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
34e0: 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e  0,&zBuf[k], encn
34f0: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
3500: 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74  ;.    k += sqlit
3510: 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66  e3Strlen30(&zBuf
3520: 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b  [k]);.    zBuf[k
3530: 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23  ++] = 0;.  }.}.#
3540: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
3550: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
3560: 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65   Print the value
3570: 20 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66   of a register f
3580: 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f  or tracing purpo
3590: 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ses:.*/.static v
35a0: 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e  oid memTracePrin
35b0: 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28  t(Mem *p){.  if(
35c0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
35d0: 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20 20 20  Undefined ){.   
35e0: 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65 66 69   printf(" undefi
35f0: 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ned");.  }else i
3600: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3610: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 72  M_Null ){.    pr
3620: 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b 0a 20  intf(" NULL");. 
3630: 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66   }else if( (p->f
3640: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
3650: 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f  MEM_Str))==(MEM_
3660: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a  Int|MEM_Str) ){.
3670: 20 20 20 20 70 72 69 6e 74 66 28 22 20 73 69 3a      printf(" si:
3680: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
3690: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
36a0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
36b0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 69  {.    printf(" i
36c0: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
36d0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
36e0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
36f0: 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  INT.  }else if( 
3700: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
3710: 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  eal ){.    print
3720: 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29  f(" r:%g", p->r)
3730: 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65  ;.#endif.  }else
3740: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3750: 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20  MEM_RowSet ){.  
3760: 20 20 70 72 69 6e 74 66 28 22 20 28 72 6f 77 73    printf(" (rows
3770: 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  et)");.  }else{.
3780: 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30      char zBuf[20
3790: 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0];.    sqlite3V
37a0: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
37b0: 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20  t(p, zBuf);.    
37c0: 70 72 69 6e 74 66 28 22 20 25 73 22 2c 20 7a 42  printf(" %s", zB
37d0: 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69  uf);.  }.}.stati
37e0: 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72 54  c void registerT
37f0: 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c 20 4d  race(int iReg, M
3800: 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66  em *p){.  printf
3810: 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69  ("REG[%d] = ", i
3820: 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65  Reg);.  memTrace
3830: 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e  Print(p);.  prin
3840: 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64  tf("\n");.}.#end
3850: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
3860: 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e  E_DEBUG.#  defin
3870: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
3880: 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61  (R,M) if(db->fla
3890: 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72  gs&SQLITE_VdbeTr
38a0: 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61 63  ace)registerTrac
38b0: 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20  e(R,M).#else.#  
38c0: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
38d0: 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69  TRACE(R,M).#endi
38e0: 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f  f...#ifdef VDBE_
38f0: 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20  PROFILE../* .** 
3900: 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e  hwtime.h contain
3910: 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c  s inline assembl
3920: 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c  er code for impl
3930: 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67  ementing .** hig
3940: 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69  h-performance ti
3950: 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a  ming routines..*
3960: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69  /.#include "hwti
3970: 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23  me.h"..#endif..#
3980: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a  ifndef NDEBUG./*
3990: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
39a0: 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64  n is only called
39b0: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
39c0: 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73  assert() express
39d0: 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b  ion. It.** check
39e0: 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74  s that the sqlit
39f0: 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20  e3.nTransaction 
3a00: 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72  variable is corr
3a10: 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20  ectly set to.** 
3a20: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  the number of no
3a30: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
3a40: 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74  vepoints current
3a50: 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69  ly in the .** li
3a60: 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
3a70: 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53  ng at sqlite3.pS
3a80: 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a  avepoint..** .**
3a90: 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20   Usage:.**.**   
3aa0: 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
3ab0: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
3ac0: 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ) );.*/.static i
3ad0: 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  nt checkSavepoin
3ae0: 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a  tCount(sqlite3 *
3af0: 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30  db){.  int n = 0
3b00: 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
3b10: 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53  ;.  for(p=db->pS
3b20: 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70  avepoint; p; p=p
3b30: 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20  ->pNext) n++;.  
3b40: 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e  assert( n==(db->
3b50: 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
3b60: 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
3b70: 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65  vepoint) );.  re
3b80: 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66  turn 1;.}.#endif
3b90: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65  .../*.** Execute
3ba0: 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44   as much of a VD
3bb0: 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65  BE program as we
3bc0: 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73   can..** This is
3bd0: 20 74 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c   the core of sql
3be0: 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a  ite3_step().  .*
3bf0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
3c00: 65 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70  eExec(.  Vdbe *p
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c20: 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
3c30: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3d 30  */.){.  int pc=0
3c40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
3c50: 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 61     /* The progra
3c60: 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f  m counter */.  O
3c70: 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b  p *aOp = p->aOp;
3c80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70            /* Cop
3c90: 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20  y of p->aOp */. 
3ca0: 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20   Op *pOp;       
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
3cc0: 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e  urrent operation
3cd0: 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53   */.  int rc = S
3ce0: 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20  QLITE_OK;       
3cf0: 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
3d00: 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  urn */.  sqlite3
3d10: 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20   *db = p->db;   
3d20: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
3d30: 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65  ase */.  u8 rese
3d40: 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d  tSchemaOnFault =
3d50: 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68   0; /* Reset sch
3d60: 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65 72 72  ema after an err
3d70: 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a  or if positive *
3d80: 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20  /.  u8 encoding 
3d90: 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f  = ENC(db);     /
3da0: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65  * The database e
3db0: 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
3dc0: 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20   iCompare = 0;  
3dd0: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
3de0: 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d  t of last OP_Com
3df0: 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a  pare operation *
3e00: 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d  /.  unsigned nVm
3e10: 53 74 65 70 20 3d 20 30 3b 20 20 20 20 20 20 2f  Step = 0;      /
3e20: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74  * Number of virt
3e30: 75 61 6c 20 6d 61 63 68 69 6e 65 20 73 74 65 70  ual machine step
3e40: 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  s */.#ifndef SQL
3e50: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
3e60: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73  S_CALLBACK.  uns
3e70: 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4c  igned nProgressL
3e80: 69 6d 69 74 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f  imit = 0;/* Invo
3e90: 6b 65 20 78 50 72 6f 67 72 65 73 73 28 29 20 77  ke xProgress() w
3ea0: 68 65 6e 20 6e 56 6d 53 74 65 70 20 72 65 61 63  hen nVmStep reac
3eb0: 68 65 73 20 74 68 69 73 20 2a 2f 0a 23 65 6e 64  hes this */.#end
3ec0: 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d  if.  Mem *aMem =
3ed0: 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20   p->aMem;       
3ee0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d  /* Copy of p->aM
3ef0: 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  em */.  Mem *pIn
3f00: 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  1 = 0;          
3f10: 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20     /* 1st input 
3f20: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
3f30: 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20   *pIn2 = 0;     
3f40: 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69          /* 2nd i
3f50: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
3f60: 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b    Mem *pIn3 = 0;
3f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3f80: 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  3rd input operan
3f90: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  d */.  Mem *pOut
3fa0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
3fb0: 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72    /* Output oper
3fc0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50  and */.  int *aP
3fd0: 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20 20 20  ermute = 0;     
3fe0: 20 20 20 20 2f 2a 20 50 65 72 6d 75 74 61 74 69      /* Permutati
3ff0: 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  on of columns fo
4000: 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a  r OP_Compare */.
4010: 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 20    i64 lastRowid 
4020: 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
4030: 20 20 2f 2a 20 53 61 76 65 64 20 76 61 6c 75 65    /* Saved value
4040: 20 6f 66 20 74 68 65 20 6c 61 73 74 20 69 6e 73   of the last ins
4050: 65 72 74 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66  ert ROWID */.#if
4060: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
4070: 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20  .  u64 start;   
4080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4090: 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74   CPU clock count
40a0: 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63   at start of opc
40b0: 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
40c0: 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43  /*** INSERT STAC
40d0: 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a  K UNION HERE ***
40e0: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
40f0: 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49  magic==VDBE_MAGI
4100: 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c  C_RUN );  /* sql
4110: 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72 69  ite3_step() veri
4120: 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 73  fies this */.  s
4130: 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65 72 28  qlite3VdbeEnter(
4140: 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d  p);.  if( p->rc=
4150: 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
4160: 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
4170: 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63  pens if a malloc
4180: 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c  () inside a call
4190: 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   to sqlite3_colu
41a0: 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20  mn_text() or.   
41b0: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   ** sqlite3_colu
41c0: 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c  mn_text16() fail
41d0: 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  ed.  */.    goto
41e0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61   no_mem;.  }.  a
41f0: 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51  ssert( p->rc==SQ
4200: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63  LITE_OK || p->rc
4210: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b  ==SQLITE_BUSY );
4220: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
4230: 73 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65  sReader || p->re
4240: 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70  adOnly!=0 );.  p
4250: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  ->rc = SQLITE_OK
4260: 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54  ;.  p->iCurrentT
4270: 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  ime = 0;.  asser
4280: 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30  t( p->explain==0
4290: 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74   );.  p->pResult
42a0: 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62  Set = 0;.  db->b
42b0: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
42c0: 20 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e   = 0;.  if( db->
42d0: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
42e0: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
42f0: 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a  e_to_interrupt;.
4300: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54    sqlite3VdbeIOT
4310: 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e  raceSql(p);.#ifn
4320: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4330: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
4340: 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f  K.  if( db->xPro
4350: 67 72 65 73 73 20 29 7b 0a 20 20 20 20 61 73 73  gress ){.    ass
4360: 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72  ert( 0 < db->nPr
4370: 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20 20 20  ogressOps );.   
4380: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
4390: 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 2d 3e 61  = (unsigned)p->a
43a0: 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
43b0: 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45  TMTSTATUS_VM_STE
43c0: 50 5d 3b 0a 20 20 20 20 69 66 28 20 6e 50 72 6f  P];.    if( nPro
43d0: 67 72 65 73 73 4c 69 6d 69 74 3d 3d 30 20 29 7b  gressLimit==0 ){
43e0: 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73  .      nProgress
43f0: 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f  Limit = db->nPro
4400: 67 72 65 73 73 4f 70 73 3b 0a 20 20 20 20 7d 65  gressOps;.    }e
4410: 6c 73 65 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67  lse{.      nProg
4420: 72 65 73 73 4c 69 6d 69 74 20 25 3d 20 28 75 6e  ressLimit %= (un
4430: 73 69 67 6e 65 64 29 64 62 2d 3e 6e 50 72 6f 67  signed)db->nProg
4440: 72 65 73 73 4f 70 73 3b 0a 20 20 20 20 7d 0a 20  ressOps;.    }. 
4450: 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66   }.#endif.#ifdef
4460: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
4470: 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
4480: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66  gnMalloc();.  if
4490: 28 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26  ( p->pc==0.   &&
44a0: 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26   (p->db->flags &
44b0: 20 28 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73   (SQLITE_VdbeLis
44c0: 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65  ting|SQLITE_Vdbe
44d0: 45 51 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54  EQP|SQLITE_VdbeT
44e0: 72 61 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20  race))!=0.  ){. 
44f0: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e     int i;.    in
4500: 74 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20  t once = 1;.    
4510: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4520: 53 71 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20  Sql(p);.    if( 
4530: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
4540: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
4550: 67 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74  g ){.      print
4560: 66 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20  f("VDBE Program 
4570: 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20  Listing:\n");.  
4580: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70      for(i=0; i<p
4590: 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nOp; i++){.   
45a0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
45b0: 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
45c0: 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20  i, &aOp[i]);.   
45d0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
45e0: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
45f0: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  & SQLITE_VdbeEQP
4600: 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d   ){.      for(i=
4610: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
4620: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61  ){.        if( a
4630: 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[i].opcode==OP
4640: 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20  _Explain ){.    
4650: 20 20 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29        if( once )
4660: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 51 75   printf("VDBE Qu
4670: 65 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20  ery Plan:\n");. 
4680: 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28           printf(
4690: 22 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70  "%s\n", aOp[i].p
46a0: 34 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20  4.z);.          
46b0: 6f 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  once = 0;.      
46c0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
46d0: 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d  }.    if( p->db-
46e0: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
46f0: 56 64 62 65 54 72 61 63 65 20 29 20 20 70 72 69  VdbeTrace )  pri
4700: 6e 74 66 28 22 56 44 42 45 20 54 72 61 63 65 3a  ntf("VDBE Trace:
4710: 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  \n");.  }.  sqli
4720: 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
4730: 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66  oc();.#endif.  f
4740: 6f 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d  or(pc=p->pc; rc=
4750: 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b  =SQLITE_OK; pc++
4760: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
4770: 63 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f  c>=0 && pc<p->nO
4780: 70 20 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  p );.    if( db-
4790: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
47a0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66  goto no_mem;.#if
47b0: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
47c0: 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c  .    start = sql
47d0: 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65  ite3Hwtime();.#e
47e0: 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70  ndif.    nVmStep
47f0: 2b 2b 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61  ++;.    pOp = &a
4800: 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20  Op[pc];..    /* 
4810: 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69  Only allow traci
4820: 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ng if SQLITE_DEB
4830: 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
4840: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
4850: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
4860: 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ( db->flags & SQ
4870: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29  LITE_VdbeTrace )
4880: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
4890: 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75  dbePrintOp(stdou
48a0: 74 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20  t, pc, pOp);.   
48b0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20   }.#endif.      
48c0: 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74  ..    /* Check t
48d0: 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64  o see if we need
48e0: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20   to simulate an 
48f0: 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73  interrupt.  This
4900: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20   only happens.  
4910: 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20    ** if we have 
4920: 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62  a special test b
4930: 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  uild..    */.#if
4940: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
4950: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
4960: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e  interrupt_count>
4970: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
4980: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
4990: 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20  nt--;.      if( 
49a0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
49b0: 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20  t_count==0 ){.  
49c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
49d0: 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20  terrupt(db);.   
49e0: 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
49f0: 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61 6e 79  f..    /* On any
4a00: 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65   opcode with the
4a10: 20 22 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73   "out2-prereleas
4a20: 65 22 20 74 61 67 2c 20 66 72 65 65 20 61 6e 79  e" tag, free any
4a30: 0a 20 20 20 20 2a 2a 20 65 78 74 65 72 6e 61 6c  .    ** external
4a40: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f 75 74   allocations out
4a50: 20 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e 64 20   of mem[p2] and 
4a60: 73 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 62  set mem[p2] to b
4a70: 65 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e 64 65  e.    ** an unde
4a80: 66 69 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20  fined integer.  
4a90: 4f 70 63 6f 64 65 73 20 77 69 6c 6c 20 65 69 74  Opcodes will eit
4aa0: 68 65 72 20 66 69 6c 6c 20 69 6e 20 74 68 65 20  her fill in the 
4ab0: 69 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a 20 76  integer.    ** v
4ac0: 61 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72 74 20  alue or convert 
4ad0: 6d 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64 69 66  mem[p2] to a dif
4ae0: 66 65 72 65 6e 74 20 74 79 70 65 2e 0a 20 20 20  ferent type..   
4af0: 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
4b00: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71  pOp->opflags==sq
4b10: 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
4b20: 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d  rty[pOp->opcode]
4b30: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   );.    if( pOp-
4b40: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
4b50: 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45  _OUT2_PRERELEASE
4b60: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
4b70: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
4b80: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
4b90: 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p2<=(p->nMem-p
4ba0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
4bb0: 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
4bc0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
4bd0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
4be0: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
4bf0: 20 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65    VdbeMemRelease
4c00: 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f  (pOut);.      pO
4c10: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
4c20: 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  Int;.    }..    
4c30: 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69  /* Sanity checki
4c40: 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72  ng on other oper
4c50: 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ands */.#ifdef S
4c60: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
4c70: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
4c80: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d  s & OPFLG_IN1)!=
4c90: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
4ca0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
4cb0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
4cc0: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p1<=(p->nMem-
4cd0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
4ce0: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
4cf0: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
4d00: 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20  p->p1]) );.     
4d10: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
4d20: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
4d30: 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70  riants(&aMem[pOp
4d40: 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p1]) );.      
4d50: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
4d60: 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p1, &aMem[pO
4d70: 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p1]);.    }. 
4d80: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
4d90: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32  lags & OPFLG_IN2
4da0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
4db0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
4dc0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
4dd0: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
4de0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
4df0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
4e00: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
4e10: 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20  [pOp->p2]) );.  
4e20: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
4e30: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
4e40: 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b  nvariants(&aMem[
4e50: 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20  pOp->p2]) );.   
4e60: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
4e70: 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  E(pOp->p2, &aMem
4e80: 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
4e90: 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  }.    if( (pOp->
4ea0: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
4eb0: 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN3)!=0 ){.     
4ec0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
4ed0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
4ee0: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
4ef0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
4f00: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
4f10: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
4f20: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
4f30: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
4f40: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
4f50: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
4f60: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
4f70: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
4f80: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
4f90: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
4fa0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
4fb0: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
4fc0: 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20  LG_OUT2)!=0 ){. 
4fd0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
4fe0: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
4ff0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5000: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5010: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d  rsor) );.      m
5020: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
5030: 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  p, &aMem[pOp->p2
5040: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5050: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5060: 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30  & OPFLG_OUT3)!=0
5070: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5080: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5090: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
50a0: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
50b0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
50c0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
50d0: 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
50e0: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23  p->p3]);.    }.#
50f0: 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69  endif.  .    swi
5100: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
5110: 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ){../**********
5120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5160: 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c  ***.** What foll
5170: 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69 76 65  ows is a massive
5180: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
5190: 74 20 77 68 65 72 65 20 65 61 63 68 20 63 61 73  t where each cas
51a0: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a  e implements a.*
51b0: 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73 74 72  * separate instr
51c0: 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69  uction in the vi
51d0: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
51e0: 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65  If we follow the
51f0: 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74   usual.** indent
5200: 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e  ation convention
5210: 73 2c 20 65 61 63 68 20 63 61 73 65 20 73 68 6f  s, each case sho
5220: 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20  uld be indented 
5230: 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
5240: 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c  t.** that is a l
5250: 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73 70 61  ot of wasted spa
5260: 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d  ce on the left m
5270: 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63  argin.  So the c
5280: 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68  ode within.** th
5290: 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
52a0: 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69  nt will break wi
52b0: 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e  th convention an
52c0: 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e  d be flush-left.
52d0: 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20   Another.** big 
52e0: 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72  comment (similar
52f0: 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69   to this one) wi
5300: 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e  ll mark the poin
5310: 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68  t in the code wh
5320: 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69  ere.** we transi
5330: 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72  tion back to nor
5340: 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e  mal indentation.
5350: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61  .**.** The forma
5360: 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61  tting of each ca
5370: 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e  se is important.
5380: 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66    The makefile f
5390: 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e  or SQLite.** gen
53a0: 65 72 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c  erates two C fil
53b0: 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61  es "opcodes.h" a
53c0: 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62  nd "opcodes.c" b
53d0: 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a  y scanning this.
53e0: 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20  ** file looking 
53f0: 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62  for lines that b
5400: 65 67 69 6e 20 77 69 74 68 20 22 63 61 73 65 20  egin with "case 
5410: 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64  OP_".  The opcod
5420: 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69  es.h files.** wi
5430: 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74  ll be filled wit
5440: 68 20 23 64 65 66 69 6e 65 73 20 74 68 61 74 20  h #defines that 
5450: 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65  give unique inte
5460: 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61  ger values to ea
5470: 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64  ch.** opcode and
5480: 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66   the opcodes.c f
5490: 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69  ile is filled wi
54a0: 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73  th an array of s
54b0: 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20  trings where.** 
54c0: 65 61 63 68 20 73 74 72 69 6e 67 20 69 73 20 74  each string is t
54d0: 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65  he symbolic name
54e0: 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70   for the corresp
54f0: 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20  onding opcode.  
5500: 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73  If the.** case s
5510: 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c  tatement is foll
5520: 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e  owed by a commen
5530: 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f  t of the form "/
5540: 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f  # same as ... #/
5550: 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e  ".** that commen
5560: 74 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  t is used to det
5570: 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69  ermine the parti
5580: 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74  cular value of t
5590: 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  he opcode..**.**
55a0: 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20   Other keywords 
55b0: 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  in the comment t
55c0: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68  hat follows each
55d0: 20 63 61 73 65 20 61 72 65 20 75 73 65 64 20 74   case are used t
55e0: 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74  o.** construct t
55f0: 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c  he OPFLG_INITIAL
5600: 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61 74 20  IZER value that 
5610: 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f  initializes opco
5620: 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a  deProperty[]..**
5630: 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64   Keywords includ
5640: 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33  e: in1, in2, in3
5650: 2c 20 6f 75 74 32 5f 70 72 65 72 65 6c 65 61 73  , out2_prereleas
5660: 65 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20  e, out2, out3.  
5670: 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63  See.** the mkopc
5680: 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20  odeh.awk script 
5690: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
56a0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
56b0: 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  * Documentation 
56c0: 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64  about VDBE opcod
56d0: 65 73 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  es is generated 
56e0: 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73  by scanning this
56f0: 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e   file.** for lin
5700: 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61  es of that conta
5710: 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54  in "Opcode:".  T
5720: 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c  hat line and all
5730: 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63   subsequent.** c
5740: 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65  omment lines are
5750: 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
5760: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f  eration of the o
5770: 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d  pcode.html docum
5780: 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65  entation.** file
5790: 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a  ..**.** SUMMARY:
57a0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61  .**.**     Forma
57b0: 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61  tting is importa
57c0: 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20 74 68  nt to scripts th
57d0: 61 74 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c  at scan this fil
57e0: 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74  e..**     Do not
57f0: 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68   deviate from th
5800: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79  e formatting sty
5810: 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  le currently in 
5820: 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  use..**.********
5830: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5840: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5850: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5860: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5870: 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  *****/../* Opcod
5880: 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20  e:  Goto * P2 * 
5890: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63  * *.**.** An unc
58a0: 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20  onditional jump 
58b0: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  to address P2..*
58c0: 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72  * The next instr
58d0: 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20  uction executed 
58e0: 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20  will be .** the 
58f0: 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32 20  one at index P2 
5900: 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
5910: 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f  ng of.** the pro
5920: 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  gram..**.** The 
5930: 50 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  P1 parameter is 
5940: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75 73 65  not actually use
5950: 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
5960: 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a  .  However, it.*
5970: 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 73  * is sometimes s
5980: 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64 20  et to 1 instead 
5990: 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74 20 74  of 0 as a hint t
59a0: 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69  o the command-li
59b0: 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74  ne shell.** that
59c0: 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20 74 68   this Goto is th
59d0: 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f  e bottom of a lo
59e0: 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  op and that the 
59f0: 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20 64 6f  lines from P2 do
5a00: 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75 72  wn.** to the cur
5a10: 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64  rent line should
5a20: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66 6f 72   be indented for
5a30: 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e   EXPLAIN output.
5a40: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f  .*/.case OP_Goto
5a50: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
5a60: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 70 63 20  /* jump */.  pc 
5a70: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 0a  = pOp->p2 - 1;..
5a80: 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61    /* Opcodes tha
5a90: 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  t are used as th
5aa0: 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f  e bottom of a lo
5ab0: 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f  op (OP_Next, OP_
5ac0: 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e  Prev,.  ** OP_VN
5ad0: 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65  ext, OP_RowSetNe
5ae0: 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72  xt, or OP_Sorter
5af0: 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68  Next) all jump h
5b00: 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f  ere upon.  ** co
5b10: 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b  mpletion.  Check
5b20: 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74   to see if sqlit
5b30: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68  e3_interrupt() h
5b40: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20  as been called. 
5b50: 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72   ** or if the pr
5b60: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
5b70: 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f  needs to be invo
5b80: 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ked. .  **.  ** 
5b90: 54 68 69 73 20 63 6f 64 65 20 75 73 65 73 20 75  This code uses u
5ba0: 6e 73 74 72 75 63 74 75 72 65 64 20 22 67 6f 74  nstructured "got
5bb0: 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e  o" statements an
5bc0: 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20  d does not look 
5bd0: 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20  clean..  ** But 
5be0: 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20  that is not due 
5bf0: 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67  to sloppy coding
5c00: 20 68 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64   habits. The cod
5c10: 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68 69  e is written thi
5c20: 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70  s.  ** way for p
5c30: 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61  erformance, to a
5c40: 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72  void having to r
5c50: 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75 70 74  un the interrupt
5c60: 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20   and progress.  
5c70: 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65  ** checks on eve
5c80: 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73  ry opcode.  This
5c90: 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73   helps sqlite3_s
5ca0: 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f  tep() to run abo
5cb0: 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73  ut 1.5%.  ** fas
5cc0: 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ter according to
5cd0: 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f   "valgrind --too
5ce0: 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f  l=cachegrind" */
5cf0: 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  .check_for_inter
5d00: 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e  rupt:.  if( db->
5d10: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
5d20: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
5d30: 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a  e_to_interrupt;.
5d40: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
5d50: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
5d60: 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20  LBACK.  /* Call 
5d70: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
5d80: 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73 20 63  lback if it is c
5d90: 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74 68  onfigured and th
5da0: 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65  e required numbe
5db0: 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f  r.  ** of VDBE o
5dc0: 70 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65  ps have been exe
5dd0: 63 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69  cuted (either si
5de0: 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74  nce this invocat
5df0: 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69  ion of.  ** sqli
5e00: 74 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72  te3VdbeExec() or
5e10: 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65   since last time
5e20: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
5e30: 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65  llback was calle
5e40: 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  d)..  ** If the 
5e50: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
5e60: 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  k returns non-ze
5e70: 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72  ro, exit the vir
5e80: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74  tual machine wit
5e90: 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20  h.  ** a return 
5ea0: 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52  code SQLITE_ABOR
5eb0: 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62  T..  */.  if( db
5ec0: 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 20 26  ->xProgress!=0 &
5ed0: 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67  & nVmStep>=nProg
5ee0: 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20  ressLimit ){.   
5ef0: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72   assert( db->nPr
5f00: 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a  ogressOps!=0 );.
5f10: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
5f20: 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64  it = nVmStep + d
5f30: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
5f40: 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e  - (nVmStep%db->n
5f50: 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20  ProgressOps);.  
5f60: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
5f70: 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73  ess(db->pProgres
5f80: 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72  sArg) ){.      r
5f90: 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
5fa0: 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  RUPT;.      goto
5fb0: 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
5fc0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
5fd0: 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d  if.  .  break;.}
5fe0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
5ff0: 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  sub P1 P2 * * *.
6000: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
6010: 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20  current address 
6020: 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 31  onto register P1
6030: 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d  .** and then jum
6040: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
6050: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75  .*/.case OP_Gosu
6060: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
6070: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
6080: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
6090: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
60a0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
60b0: 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
60c0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
60d0: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
60e0: 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b  amic(pIn1)==0 );
60f0: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
6100: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
6110: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
6120: 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75  M_Int;.  pIn1->u
6130: 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53  .i = pc;.  REGIS
6140: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
6150: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d  1, pIn1);.  pc =
6160: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
6170: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6180: 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20  ode:  Return P1 
6190: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75  * * * *.**.** Ju
61a0: 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  mp to the next i
61b0: 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72  nstruction after
61c0: 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20   the address in 
61d0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 41 66  register P1.  Af
61e0: 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c  ter.** the jump,
61f0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63   register P1 bec
6200: 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  omes undefined..
6210: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72  */.case OP_Retur
6220: 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  n: {           /
6230: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
6240: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6250: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
6260: 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
6270: 20 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74 29   );.  pc = (int)
6280: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
6290: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
62a0: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
62b0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
62c0: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50   InitCoroutine P
62d0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
62e0: 2a 20 53 65 74 20 75 70 20 72 65 67 69 73 74 65  * Set up registe
62f0: 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
6300: 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68  will Yield to th
6310: 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c  e coroutine.** l
6320: 6f 63 61 74 65 64 20 61 74 20 61 64 64 72 65 73  ocated at addres
6330: 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  s P3..**.** If P
6340: 32 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f  2!=0 then the co
6350: 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e  routine implemen
6360: 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65  tation immediate
6370: 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68  ly follows.** th
6380: 69 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a  is opcode.  So j
6390: 75 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72  ump over the cor
63a0: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
63b0: 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72  ation to.** addr
63c0: 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ess P2..**.** Se
63d0: 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75  e also: EndCorou
63e0: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
63f0: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b  InitCoroutine: {
6400: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
6410: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6420: 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c  1>0 &&  pOp->p1<
6430: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
6440: 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72  rsor) );.  asser
6450: 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26  t( pOp->p2>=0 &&
6460: 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20   pOp->p2<p->nOp 
6470: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
6480: 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p3>=0 && pOp->
6490: 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  p3<p->nOp );.  p
64a0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
64b0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
64c0: 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28  !VdbeMemDynamic(
64d0: 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d  pOut) );.  pOut-
64e0: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d  >u.i = pOp->p3 -
64f0: 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   1;.  pOut->flag
6500: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69  s = MEM_Int;.  i
6510: 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 70 63 20  f( pOp->p2 ) pc 
6520: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
6530: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6540: 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74  code:  EndCorout
6550: 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ine P1 * * * *.*
6560: 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63  *.** The instruc
6570: 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72  tion at the addr
6580: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
6590: 50 31 20 69 73 20 61 6e 20 59 69 65 6c 64 2e 0a  P1 is an Yield..
65a0: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
65b0: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
65c0: 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66  hat Yield..** Af
65d0: 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  ter the jump, re
65e0: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
65f0: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
6600: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
6610: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
6620: 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69  se OP_EndCorouti
6630: 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ne: {           
6640: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65  /* in1 */.  Vdbe
6650: 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70  Op *pCaller;.  p
6660: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
6670: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6680: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
6690: 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
66a0: 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26  ( pIn1->u.i>=0 &
66b0: 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e  & pIn1->u.i<p->n
66c0: 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20  Op );.  pCaller 
66d0: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
66e0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61  ];.  assert( pCa
66f0: 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  ller->opcode==OP
6700: 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65  _Yield );.  asse
6710: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e  rt( pCaller->p2>
6720: 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70  =0 && pCaller->p
6730: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 63  2<p->nOp );.  pc
6740: 20 3d 20 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d   = pCaller->p2 -
6750: 20 31 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   1;.  pIn1->flag
6760: 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s = MEM_Undefine
6770: 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  d;.  break;.}../
6780: 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64  * Opcode:  Yield
6790: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
67a0: 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f 67  ** Swap the prog
67b0: 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68  ram counter with
67c0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
67d0: 67 69 73 74 65 72 20 50 31 2e 20 20 54 68 69 73  gister P1.  This
67e0: 0a 2a 2a 20 68 61 73 20 74 68 65 20 65 66 66 65  .** has the effe
67f0: 63 74 20 6f 66 20 79 69 65 6c 64 69 6e 67 20 74  ct of yielding t
6800: 6f 20 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a  o a coroutine..*
6810: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 72 6f  *.** If the coro
6820: 75 74 69 6e 65 20 74 68 61 74 20 69 73 20 6c 61  utine that is la
6830: 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20 69  unched by this i
6840: 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20  nstruction ends 
6850: 77 69 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72  with.** Yield or
6860: 20 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e   Return then con
6870: 74 69 6e 75 65 20 74 6f 20 74 68 65 20 6e 65 78  tinue to the nex
6880: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  t instruction.  
6890: 42 75 74 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  But if.** the co
68a0: 72 6f 75 74 69 6e 65 20 6c 61 75 6e 63 68 65 64  routine launched
68b0: 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
68c0: 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a  tion ends with.*
68d0: 2a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20  * EndCoroutine, 
68e0: 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20  then jump to P2 
68f0: 72 61 74 68 65 72 20 74 68 61 6e 20 63 6f 6e 74  rather than cont
6900: 69 6e 75 69 6e 67 20 77 69 74 68 20 74 68 65 0a  inuing with the.
6910: 2a 2a 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  ** next instruct
6920: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
6930: 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  lso: InitCorouti
6940: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69  ne.*/.case OP_Yi
6950: 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eld: {          
6960: 20 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a    /* in1, jump *
6970: 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a  /.  int pcDest;.
6980: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
6990: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
69a0: 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  t( VdbeMemDynami
69b0: 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20  c(pIn1)==0 );.  
69c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
69d0: 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20  M_Int;.  pcDest 
69e0: 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69  = (int)pIn1->u.i
69f0: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20  ;.  pIn1->u.i = 
6a00: 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  pc;.  REGISTER_T
6a10: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6a20: 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63 44 65  n1);.  pc = pcDe
6a30: 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  st;.  break;.}..
6a40: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
6a50: 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33  IfNull  P1 P2 P3
6a60: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
6a70: 69 73 3a 20 20 69 66 20 72 5b 50 33 5d 3d 6e 75  is:  if r[P3]=nu
6a80: 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68  ll halt.**.** Ch
6a90: 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e  eck the value in
6aa0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49   register P3.  I
6ab0: 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65  f it is NULL the
6ac0: 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20  n Halt using.** 
6ad0: 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32  parameter P1, P2
6ae0: 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74  , and P4 as if t
6af0: 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20  his were a Halt 
6b00: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
6b10: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
6b20: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
6b30: 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
6b40: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
6b50: 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50   no-op..** The P
6b60: 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75  5 parameter shou
6b70: 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65  ld be 1..*/.case
6b80: 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20   OP_HaltIfNull: 
6b90: 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f  {      /* in3 */
6ba0: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
6bb0: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
6bc0: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
6bd0: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72  EM_Null)==0 ) br
6be0: 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
6bf0: 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48  hrough into OP_H
6c00: 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63  alt */.}../* Opc
6c10: 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32  ode:  Halt P1 P2
6c20: 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45   * P4 P5.**.** E
6c30: 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  xit immediately.
6c40: 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f    All open curso
6c50: 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73  rs, etc are clos
6c60: 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61  ed.** automatica
6c70: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  lly..**.** P1 is
6c80: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65   the result code
6c90: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
6ca0: 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c  ite3_exec(), sql
6cb0: 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a  ite3_reset(),.**
6cc0: 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61   or sqlite3_fina
6cd0: 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e  lize().  For a n
6ce0: 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73  ormal halt, this
6cf0: 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54   should be SQLIT
6d00: 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72  E_OK (0)..** For
6d10: 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20   errors, it can 
6d20: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61  be some other va
6d30: 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74  lue.  If P1!=0 t
6d40: 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65  hen P2 will dete
6d50: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
6d60: 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62   or not to rollb
6d70: 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  ack the current 
6d80: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f  transaction.  Do
6d90: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a   not rollback.**
6da0: 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e   if P2==OE_Fail.
6db0: 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   Do the rollback
6dc0: 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62   if P2==OE_Rollb
6dd0: 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f  ack.  If P2==OE_
6de0: 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62  Abort,.** then b
6df0: 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e  ack out all chan
6e00: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63  ges that have oc
6e10: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68  curred during th
6e20: 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  is execution of 
6e30: 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74  the.** VDBE, but
6e40: 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   do not rollback
6e50: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
6e60: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  . .**.** If P4 i
6e70: 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20  s not null then 
6e80: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d  it is an error m
6e90: 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a  essage string..*
6ea0: 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c  *.** P5 is a val
6eb0: 75 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64  ue between 0 and
6ec0: 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74   4, inclusive, t
6ed0: 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65  hat modifies the
6ee0: 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a   P4 string..**.*
6ef0: 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61  *    0:  (no cha
6f00: 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e  nge).**    1:  N
6f10: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e  OT NULL contrain
6f20: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
6f30: 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f     2:  UNIQUE co
6f40: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
6f50: 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48   P4.**    3:  CH
6f60: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ECK constraint f
6f70: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
6f80: 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  4:  FOREIGN KEY 
6f90: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
6fa0: 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50  d: P4.**.** If P
6fb0: 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e  5 is not zero an
6fc0: 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68  d P4 is NULL, th
6fd0: 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61 66  en everything af
6fe0: 74 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a  ter the ":" is.*
6ff0: 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a  * omitted..**.**
7000: 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70   There is an imp
7010: 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30  lied "Halt 0 0 0
7020: 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  " instruction in
7030: 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65  serted at the ve
7040: 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65  ry end of.** eve
7050: 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20  ry program.  So 
7060: 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20  a jump past the 
7070: 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  last instruction
7080: 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a   of the program.
7090: 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  ** is the same a
70a0: 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74  s executing Halt
70b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
70c0: 74 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  t: {.  const cha
70d0: 72 20 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73  r *zType;.  cons
70e0: 74 20 63 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b  t char *zLogFmt;
70f0: 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  ..  if( pOp->p1=
7100: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d  =SQLITE_OK && p-
7110: 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f  >pFrame ){.    /
7120: 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70  * Halt the sub-p
7130: 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63  rogram. Return c
7140: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61  ontrol to the pa
7150: 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20  rent frame. */. 
7160: 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46     VdbeFrame *pF
7170: 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rame = p->pFrame
7180: 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20  ;.    p->pFrame 
7190: 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  = pFrame->pParen
71a0: 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65  t;.    p->nFrame
71b0: 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  --;.    sqlite3V
71c0: 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
71d0: 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
71e0: 20 20 20 70 63 20 3d 20 73 71 6c 69 74 65 33 56     pc = sqlite3V
71f0: 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28  dbeFrameRestore(
7200: 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73  pFrame);.    las
7210: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
7220: 74 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20  tRowid;.    if( 
7230: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p2==OE_Igno
7240: 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  re ){.      /* I
7250: 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 20 69 73  nstruction pc is
7260: 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20   the OP_Program 
7270: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65  that invoked the
7280: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20   sub-program .  
7290: 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79      ** currently
72a0: 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49   being halted. I
72b0: 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63  f the p2 instruc
72c0: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f  tion of this OP_
72d0: 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e  Halt.      ** in
72e0: 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74  struction is set
72f0: 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74   to OE_Ignore, t
7300: 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67  hen the sub-prog
7310: 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a  ram is throwing.
7320: 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f        ** an IGNO
7330: 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e  RE exception. In
7340: 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20   this case jump 
7350: 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73  to the address s
7360: 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a  pecified.      *
7370: 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74  * as the p2 of t
7380: 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  he calling OP_Pr
7390: 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20  ogram.  */.     
73a0: 20 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d   pc = p->aOp[pc]
73b0: 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20  .p2-1;.    }.   
73c0: 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20   aOp = p->aOp;. 
73d0: 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65     aMem = p->aMe
73e0: 6d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  m;.    break;.  
73f0: 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d  }.  p->rc = pOp-
7400: 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41  >p1;.  p->errorA
7410: 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d  ction = (u8)pOp-
7420: 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70  >p2;.  p->pc = p
7430: 63 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29  c;.  if( p->rc )
7440: 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  {.    if( pOp->p
7450: 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69  5 ){.      stati
7460: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63  c const char * c
7470: 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20  onst azType[] = 
7480: 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55  { "NOT NULL", "U
7490: 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c  NIQUE", "CHECK",
74a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
74b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
74d0: 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20  OREIGN KEY" };. 
74e0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
74f0: 2d 3e 70 35 3e 3d 31 20 26 26 20 70 4f 70 2d 3e  ->p5>=1 && pOp->
7500: 70 35 3c 3d 34 20 29 3b 0a 20 20 20 20 20 20 74  p5<=4 );.      t
7510: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
7520: 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==1 );.      tes
7530: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
7540: 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  2 );.      testc
7550: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20  ase( pOp->p5==3 
7560: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
7570: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b  e( pOp->p5==4 );
7580: 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20 61  .      zType = a
7590: 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d  zType[pOp->p5-1]
75a0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
75b0: 20 20 20 7a 54 79 70 65 20 3d 20 30 3b 0a 20 20     zType = 0;.  
75c0: 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
75d0: 7a 54 79 70 65 21 3d 30 20 7c 7c 20 70 4f 70 2d  zType!=0 || pOp-
75e0: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 20 20  >p4.z!=0 );.    
75f0: 7a 4c 6f 67 46 6d 74 20 3d 20 22 61 62 6f 72 74  zLogFmt = "abort
7600: 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20   at %d in [%s]: 
7610: 25 73 22 3b 0a 20 20 20 20 69 66 28 20 7a 54 79  %s";.    if( zTy
7620: 70 65 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  pe && pOp->p4.z 
7630: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
7640: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
7650: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 20 63  rrMsg, db, "%s c
7660: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
7670: 3a 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20  : %s", .        
7680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
7690: 54 79 70 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  Type, pOp->p4.z)
76a0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
76b0: 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
76c0: 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
76d0: 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
76e0: 20 64 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e   db, "%s", pOp->
76f0: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65  p4.z);.    }else
7700: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
7710: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
7720: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 20 63 6f  rMsg, db, "%s co
7730: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22  nstraint failed"
7740: 2c 20 7a 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a  , zType);.    }.
7750: 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28      sqlite3_log(
7760: 70 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74  pOp->p1, zLogFmt
7770: 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70  , pc, p->zSql, p
7780: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a  ->zErrMsg);.  }.
7790: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
77a0: 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73  beHalt(p);.  ass
77b0: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
77c0: 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  BUSY || rc==SQLI
77d0: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
77e0: 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69  ITE_ERROR );.  i
77f0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
7800: 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20  SY ){.    p->rc 
7810: 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
7820: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
7830: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
7840: 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63  ITE_OK || (p->rc
7850: 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43  &0xff)==SQLITE_C
7860: 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20  ONSTRAINT );.   
7870: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
7880: 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44  ITE_OK || db->nD
7890: 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c  eferredCons>0 ||
78a0: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
78b0: 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72  mCons>0 );.    r
78c0: 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49  c = p->rc ? SQLI
78d0: 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54  TE_ERROR : SQLIT
78e0: 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f  E_DONE;.  }.  go
78f0: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
7900: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
7910: 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20  teger P1 P2 * * 
7920: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
7930: 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68  [P2]=P1.**.** Th
7940: 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
7950: 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69   value P1 is wri
7960: 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tten into regist
7970: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
7980: 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20  P_Integer: {    
7990: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
79a0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
79b0: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31  t->u.i = pOp->p1
79c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
79d0: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a   Opcode: Int64 *
79e0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
79f0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
7a00: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
7a10: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
7a20: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
7a30: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
7a40: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
7a50: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7a60: 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20  OP_Int64: {     
7a70: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
7a80: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
7a90: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49  sert( pOp->p4.pI
7aa0: 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  64!=0 );.  pOut-
7ab0: 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  >u.i = *pOp->p4.
7ac0: 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pI64;.  break;.}
7ad0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
7ae0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
7af0: 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  OINT./* Opcode: 
7b00: 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a  Real * P2 * P4 *
7b10: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
7b20: 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  P2]=P4.**.** P4 
7b30: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
7b40: 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e  a 64-bit floatin
7b50: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a  g point value..*
7b60: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
7b70: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
7b80: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7b90: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
7ba0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
7bb0: 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65  _FLOAT, out2-pre
7bc0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
7bd0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52  t->flags = MEM_R
7be0: 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21  eal;.  assert( !
7bf0: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f  sqlite3IsNaN(*pO
7c00: 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a  p->p4.pReal) );.
7c10: 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70    pOut->r = *pOp
7c20: 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72  ->p4.pReal;.  br
7c30: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
7c40: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
7c50: 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  8 * P2 * P4 *.**
7c60: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
7c70: 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70  ='P4'.**.** P4 p
7c80: 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74  oints to a nul t
7c90: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
7ca0: 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63  string. This opc
7cb0: 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d  ode is transform
7cc0: 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f  ed .** into an O
7cd0: 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65 20  P_String before 
7ce0: 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66  it is executed f
7cf0: 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  or the first tim
7d00: 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68  e.  During.** th
7d10: 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f  is transformatio
7d20: 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66  n, the length of
7d30: 20 73 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f   string P4 is co
7d40: 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65  mputed and store
7d50: 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70  d.** as the P1 p
7d60: 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73  arameter..*/.cas
7d70: 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20  e OP_String8: { 
7d80: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
7d90: 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75  as TK_STRING, ou
7da0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
7db0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7dc0: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70  p4.z!=0 );.  pOp
7dd0: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74  ->opcode = OP_St
7de0: 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20  ring;.  pOp->p1 
7df0: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
7e00: 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23  0(pOp->p4.z);..#
7e10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
7e20: 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65  IT_UTF16.  if( e
7e30: 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f  ncoding!=SQLITE_
7e40: 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d  UTF8 ){.    rc =
7e50: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
7e60: 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d  etStr(pOut, pOp-
7e70: 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  >p4.z, -1, SQLIT
7e80: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
7e90: 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20  TATIC);.    if( 
7ea0: 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49  rc==SQLITE_TOOBI
7eb0: 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67  G ) goto too_big
7ec0: 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45  ;.    if( SQLITE
7ed0: 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65  _OK!=sqlite3Vdbe
7ee0: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
7ef0: 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29  Out, encoding) )
7f00: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
7f10: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e    assert( pOut->
7f20: 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a  zMalloc==pOut->z
7f30: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
7f40: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
7f50: 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70  Out)==0 );.    p
7f60: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  Out->zMalloc = 0
7f70: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
7f80: 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b  s |= MEM_Static;
7f90: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
7fa0: 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43  type==P4_DYNAMIC
7fb0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
7fc0: 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d  3DbFree(db, pOp-
7fd0: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  >p4.z);.    }.  
7fe0: 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
7ff0: 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20  P4_DYNAMIC;.    
8000: 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74  pOp->p4.z = pOut
8010: 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31  ->z;.    pOp->p1
8020: 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a   = pOut->n;.  }.
8030: 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70  #endif.  if( pOp
8040: 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  ->p1>db->aLimit[
8050: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
8060: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
8070: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
8080: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
8090: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
80a0: 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d  , OP_String */.}
80b0: 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .  ./* Opcode: S
80c0: 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50 34  tring P1 P2 * P4
80d0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
80e0: 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d  r[P2]='P4' (len=
80f0: 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  P1).**.** The st
8100: 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66  ring value P4 of
8110: 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65   length P1 (byte
8120: 73 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  s) is stored in 
8130: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
8140: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20  case OP_String: 
8150: 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
8160: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
8170: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8180: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75  p4.z!=0 );.  pOu
8190: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
81a0: 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
81b0: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
81c0: 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
81d0: 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e   pOut->n = pOp->
81e0: 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  p1;.  pOut->enc 
81f0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
8200: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
8210: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
8220: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8230: 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20  Null P1 P2 P3 * 
8240: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
8250: 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a  r[P2..P3]=NULL.*
8260: 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c  *.** Write a NUL
8270: 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73  L into registers
8280: 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65 61   P2.  If P3 grea
8290: 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65  ter than P2, the
82a0: 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20  n also write.** 
82b0: 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74  NULL into regist
82c0: 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 79 20  er P3 and every 
82d0: 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74 77  register in betw
82e0: 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20  een P2 and P3.  
82f0: 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73  If P3.** is less
8300: 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63 61   than P2 (typica
8310: 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20  lly P3 is zero) 
8320: 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74  then only regist
8330: 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20  er P2 is.** set 
8340: 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49  to NULL..**.** I
8350: 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69  f the P1 value i
8360: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
8370: 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45   also set the ME
8380: 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73  M_Cleared flag s
8390: 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76  o that.** NULL v
83a0: 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63  alues will not c
83b0: 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76 65  ompare equal eve
83c0: 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  n if SQLITE_NULL
83d0: 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20  EQ is set on.** 
83e0: 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a  OP_Ne or OP_Eq..
83f0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a  */.case OP_Null:
8400: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
8410: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
8420: 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20  */.  int cnt;.  
8430: 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  u16 nullFlag;.  
8440: 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f  cnt = pOp->p3-pO
8450: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
8460: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
8470: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
8480: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
8490: 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70  = nullFlag = pOp
84a0: 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c  ->p1 ? (MEM_Null
84b0: 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20  |MEM_Cleared) : 
84c0: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c  MEM_Null;.  whil
84d0: 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20  e( cnt>0 ){.    
84e0: 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41  pOut++;.    memA
84f0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
8500: 70 4f 75 74 29 3b 0a 20 20 20 20 56 64 62 65 4d  pOut);.    VdbeM
8510: 65 6d 52 65 6c 65 61 73 65 28 70 4f 75 74 29 3b  emRelease(pOut);
8520: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
8530: 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20   = nullFlag;.   
8540: 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72   cnt--;.  }.  br
8550: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8560: 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a  e: SoftNull P1 *
8570: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
8580: 69 73 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a  is:  r[P1]=NULL.
8590: 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74  **.** Set regist
85a0: 65 72 20 50 31 20 74 6f 20 68 61 76 65 20 74 68  er P1 to have th
85b0: 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20  e value NULL as 
85c0: 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d  seen by the OP_M
85d0: 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73  akeRecord.** ins
85e0: 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f  truction, but do
85f0: 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74   not free any st
8600: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d  ring or blob mem
8610: 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  ory associated w
8620: 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73  ith.** the regis
8630: 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20  ter, so that if 
8640: 74 68 65 20 76 61 6c 75 65 20 77 61 73 20 61 20  the value was a 
8650: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
8660: 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69  hat was.** previ
8670: 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69  ously copied usi
8680: 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65  ng OP_SCopy, the
8690: 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e   copies will con
86a0: 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69  tinue to be vali
86b0: 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  d..*/.case OP_So
86c0: 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65  ftNull: {.  asse
86d0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
86e0: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
86f0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
8700: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
8710: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
8720: 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74  t->flags = (pOut
8730: 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c  ->flags|MEM_Null
8740: 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64  )&~MEM_Undefined
8750: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8760: 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31   Opcode: Blob P1
8770: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
8780: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
8790: 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20   (len=P1).**.** 
87a0: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62  P4 points to a b
87b0: 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62  lob of data P1 b
87c0: 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72  ytes long.  Stor
87d0: 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69  e this.** blob i
87e0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
87f0: 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20  /.case OP_Blob: 
8800: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
8810: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
8820: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
8830: 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49   pOp->p1 <= SQLI
8840: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b  TE_MAX_LENGTH );
8850: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
8860: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
8870: 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31  p->p4.z, pOp->p1
8880: 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d  , 0, 0);.  pOut-
8890: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
88a0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
88b0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
88c0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
88d0: 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31  ode: Variable P1
88e0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
88f0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61  nopsis: r[P2]=pa
8900: 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a 2a  rameter(P1,P4).*
8910: 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68  *.** Transfer th
8920: 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e  e values of boun
8930: 64 20 70 61 72 61 6d 65 74 65 72 20 50 31 20 69  d parameter P1 i
8940: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a  nto register P2.
8950: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72  **.** If the par
8960: 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c  ameter is named,
8970: 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61   then its name a
8980: 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a  ppears in P4..**
8990: 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73   The P4 value is
89a0: 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
89b0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
89c0: 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  name()..*/.case 
89d0: 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20  OP_Variable: {  
89e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
89f0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
8a00: 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20    Mem *pVar;    
8a10: 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e     /* Value bein
8a20: 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f  g transferred */
8a30: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
8a40: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
8a50: 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61  <=p->nVar );.  a
8a60: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
8a70: 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a  ==0 || pOp->p4.z
8a80: 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e  ==p->azVar[pOp->
8a90: 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72 20  p1-1] );.  pVar 
8aa0: 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e  = &p->aVar[pOp->
8ab0: 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73  p1 - 1];.  if( s
8ac0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
8ad0: 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20  Big(pVar) ){.   
8ae0: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
8af0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
8b00: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
8b10: 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53  Out, pVar, MEM_S
8b20: 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45  tatic);.  UPDATE
8b30: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
8b40: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
8b50: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65  ./* Opcode: Move
8b60: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
8b70: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32   Synopsis:  r[P2
8b80: 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a  @P3]=r[P1@P3].**
8b90: 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33 20  .** Move the P3 
8ba0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
8bb0: 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f  er P1..P1+P3-1 o
8bc0: 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ver into.** regi
8bd0: 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d  sters P2..P2+P3-
8be0: 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31  1.  Registers P1
8bf0: 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a  ..P1+P3-1 are.**
8c00: 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20   left holding a 
8c10: 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20  NULL.  It is an 
8c20: 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74  error for regist
8c30: 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e  er ranges.** P1.
8c40: 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e  .P1+P3-1 and P2.
8c50: 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72  .P2+P3-1 to over
8c60: 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20 65  lap.  It is an e
8c70: 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74  rror.** for P3 t
8c80: 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31  o be less than 1
8c90: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76  ..*/.case OP_Mov
8ca0: 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61  e: {.  char *zMa
8cb0: 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69  lloc;   /* Holdi
8cc0: 6e 67 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20  ng variable for 
8cd0: 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79  allocated memory
8ce0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
8cf0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
8d00: 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c 65   of registers le
8d10: 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20  ft to copy */.  
8d20: 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
8d30: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
8d40: 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69  copy from */.  i
8d50: 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20  nt p2;          
8d60: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63  /* Register to c
8d70: 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d  opy to */..  n =
8d80: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d   pOp->p3;.  p1 =
8d90: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
8da0: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
8db0: 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20  rt( n>0 && p1>0 
8dc0: 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  && p2>0 );.  ass
8dd0: 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c  ert( p1+n<=p2 ||
8de0: 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20   p2+n<=p1 );..  
8df0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d  pIn1 = &aMem[p1]
8e00: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
8e10: 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20  [p2];.  do{.    
8e20: 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61  assert( pOut<=&a
8e30: 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  Mem[(p->nMem-p->
8e40: 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
8e50: 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26   assert( pIn1<=&
8e60: 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  aMem[(p->nMem-p-
8e70: 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20  >nCursor)] );.  
8e80: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
8e90: 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
8ea0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
8eb0: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
8ec0: 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28   VdbeMemRelease(
8ed0: 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c  pOut);.    zMall
8ee0: 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  oc = pOut->zMall
8ef0: 6f 63 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70  oc;.    memcpy(p
8f00: 4f 75 74 2c 20 70 49 6e 31 2c 20 73 69 7a 65 6f  Out, pIn1, sizeo
8f10: 66 28 4d 65 6d 29 29 3b 0a 23 69 66 64 65 66 20  f(Mem));.#ifdef 
8f20: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
8f30: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
8f40: 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d  yFrom>=&aMem[p1]
8f50: 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79   && pOut->pScopy
8f60: 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31 2b 70 4f  From<&aMem[p1+pO
8f70: 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20 20 20 20  p->p3] ){.      
8f80: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
8f90: 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d 3e 70 32   += p1 - pOp->p2
8fa0: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
8fb0: 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d     pIn1->flags =
8fc0: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
8fd0: 20 20 20 20 70 49 6e 31 2d 3e 78 44 65 6c 20 3d      pIn1->xDel =
8fe0: 20 30 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d   0;.    pIn1->zM
8ff0: 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b  alloc = zMalloc;
9000: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
9010: 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b  ACE(p2++, pOut);
9020: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20  .    pIn1++;.   
9030: 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c   pOut++;.  }whil
9040: 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61  e( --n );.  brea
9050: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9060: 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a   Copy P1 P2 P3 *
9070: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9080: 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40  r[P2@P3+1]=r[P1@
9090: 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  P3+1].**.** Make
90a0: 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73   a copy of regis
90b0: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69  ters P1..P1+P3 i
90c0: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32  nto registers P2
90d0: 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54  ..P2+P3..**.** T
90e0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
90f0: 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70  makes a deep cop
9100: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
9110: 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20   A duplicate.** 
9120: 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73  is made of any s
9130: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f  tring or blob co
9140: 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73  nstant.  See als
9150: 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63  o OP_SCopy..*/.c
9160: 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20  ase OP_Copy: {. 
9170: 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70   int n;..  n = p
9180: 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d  Op->p3;.  pIn1 =
9190: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
91a0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
91b0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
91c0: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
91d0: 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a  ;.  while( 1 ){.
91e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
91f0: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
9200: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
9210: 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65  hem);.    Deephe
9220: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
9230: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
9240: 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53  BUG.    pOut->pS
9250: 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65  copyFrom = 0;.#e
9260: 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54 45  ndif.    REGISTE
9270: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
9280: 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29  pOp->p3-n, pOut)
9290: 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d  ;.    if( (n--)=
92a0: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
92b0: 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31  pOut++;.    pIn1
92c0: 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
92d0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
92e0: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
92f0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9300: 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]=r[P1].**.** 
9310: 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63  Make a shallow c
9320: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20  opy of register 
9330: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
9340: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
9350: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
9360: 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  s a shallow copy
9370: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
9380: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
9390: 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  is a string or b
93a0: 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  lob, then the co
93b0: 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69  py is only a poi
93c0: 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f  nter to the.** o
93d0: 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63  riginal and henc
93e0: 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e if the origina
93f0: 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c  l changes so wil
9400: 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57  l the copy..** W
9410: 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69  orse, if the ori
9420: 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63  ginal is dealloc
9430: 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62  ated, the copy b
9440: 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a  ecomes invalid..
9450: 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67  ** Thus the prog
9460: 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74  ram must guarant
9470: 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67  ee that the orig
9480: 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68  inal will not ch
9490: 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74  ange.** during t
94a0: 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74  he lifetime of t
94b0: 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50  he copy.  Use OP
94c0: 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20  _Copy to make a 
94d0: 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79  complete.** copy
94e0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f  ..*/.case OP_SCo
94f0: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
9500: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49   /* out2 */.  pI
9510: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
9520: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
9530: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
9540: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
9550: 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  n1 );.  sqlite3V
9560: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
9570: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
9580: 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66  M_Ephem);.#ifdef
9590: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
95a0: 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  if( pOut->pScopy
95b0: 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e  From==0 ) pOut->
95c0: 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e  pScopyFrom = pIn
95d0: 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61  1;.#endif.  brea
95e0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
95f0: 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32   ResultRow P1 P2
9600: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
9610: 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50 31  is:  output=r[P1
9620: 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  @P2].**.** The r
9630: 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f  egisters P1 thro
9640: 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74  ugh P1+P2-1 cont
9650: 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ain a single row
9660: 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20   of.** results. 
9670: 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73  This opcode caus
9680: 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  es the sqlite3_s
9690: 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65  tep() call to te
96a0: 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20  rminate.** with 
96b0: 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65  an SQLITE_ROW re
96c0: 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74  turn code and it
96d0: 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c   sets up the sql
96e0: 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72  ite3_stmt.** str
96f0: 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64  ucture to provid
9700: 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20  e access to the 
9710: 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31  r(P1)..r(P1+P2-1
9720: 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74  ) values as.** t
9730: 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a  he result row..*
9740: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74  /.case OP_Result
9750: 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  Row: {.  Mem *pM
9760: 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61  em;.  int i;.  a
9770: 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f  ssert( p->nResCo
9780: 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b  lumn==pOp->p2 );
9790: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
97a0: 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p1>0 );.  assert
97b0: 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  ( pOp->p1+pOp->p
97c0: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  2<=(p->nMem-p->n
97d0: 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69  Cursor)+1 );..#i
97e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
97f0: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
9800: 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65  ACK.  /* Run the
9810: 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65   progress counte
9820: 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65  r just before re
9830: 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20  turning..  */.  
9840: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
9850: 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74  s!=0.   && nVmSt
9860: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
9870: 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72  it.   && db->xPr
9880: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
9890: 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b  ressArg)!=0.  ){
98a0: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
98b0: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
98c0: 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
98d0: 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  halt;.  }.#endif
98e0: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73  ..  /* If this s
98f0: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f  tatement has vio
9900: 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20  lated immediate 
9910: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
9920: 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a  traints, do.  **
9930: 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20   not return the 
9940: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d  number of rows m
9950: 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20  odified. And do 
9960: 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20  not RELEASE the 
9970: 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74  statement.  ** t
9980: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e  ransaction. It n
9990: 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
99a0: 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66  d back.  */.  if
99b0: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63  ( SQLITE_OK!=(rc
99c0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
99d0: 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a  eckFk(p, 0)) ){.
99e0: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
99f0: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
9a00: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73  ntRows );.    as
9a10: 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d  sert( p->usesStm
9a20: 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20  tJournal );.    
9a30: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
9a40: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43   If the SQLITE_C
9a50: 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73  ountRows flag is
9a60: 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e   set in sqlite3.
9a70: 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
9a80: 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65   .  ** DML state
9a90: 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69  ments invoke thi
9aa0: 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75  s opcode to retu
9ab0: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
9ac0: 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69   rows .  ** modi
9ad0: 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  fied to the user
9ae0: 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  . This is the on
9af0: 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d  ly way that a VM
9b00: 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73   that.  ** opens
9b10: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
9b20: 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76  nsaction may inv
9b30: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  oke this opcode.
9b40: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61  .  **.  ** In ca
9b50: 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20  se this is such 
9b60: 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f  a statement, clo
9b70: 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74  se any statement
9b80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a   transaction.  *
9b90: 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73  * opened by this
9ba0: 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72   VM before retur
9bb0: 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  ning control to 
9bc0: 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69  the user. This i
9bd0: 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65  s to.  ** ensure
9be0: 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d   that statement-
9bf0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65  transactions are
9c00: 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20   always nested, 
9c10: 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e  not overlapping.
9c20: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65  .  ** If the ope
9c30: 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  n statement-tran
9c40: 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63  saction is not c
9c50: 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e  losed here, then
9c60: 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d   the user.  ** m
9c70: 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20  ay step another 
9c80: 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74  VM that opens it
9c90: 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20  s own statement 
9ca0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69  transaction. Thi
9cb0: 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20  s.  ** may lead 
9cc0: 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73  to overlapping s
9cd0: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
9ce0: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
9cf0: 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   The statement t
9d00: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65  ransaction is ne
9d10: 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20  ver a top-level 
9d20: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65  transaction.  He
9d30: 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c  nce.  ** the REL
9d40: 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20  EASE call below 
9d50: 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a  can never fail..
9d60: 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
9d70: 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
9d80: 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  || db->flags&SQL
9d90: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
9da0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
9db0: 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e  dbeCloseStatemen
9dc0: 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52  t(p, SAVEPOINT_R
9dd0: 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20 4e  ELEASE);.  if( N
9de0: 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
9df0: 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  OK) ){.    break
9e00: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61  ;.  }..  /* Inva
9e10: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
9e20: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
9e30: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
9e40: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
9e50: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
9e60: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
9e70: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
9e80: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
9e90: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
9ea0: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
9eb0: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
9ec0: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
9ed0: 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69  re de-ephemerali
9ee0: 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69  zed as.  ** a si
9ef0: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
9f00: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73    pMem = p->pRes
9f10: 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70  ultSet = &aMem[p
9f20: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69  Op->p1];.  for(i
9f30: 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69  =0; i<pOp->p2; i
9f40: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
9f50: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65   memIsValid(&pMe
9f60: 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65  m[i]) );.    Dee
9f70: 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65  phemeralize(&pMe
9f80: 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  m[i]);.    asser
9f90: 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  t( (pMem[i].flag
9fa0: 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d  s & MEM_Ephem)==
9fb0: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  0.            ||
9fc0: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
9fd0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
9fe0: 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  lob))==0 );.    
9ff0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
a000: 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d  lTerminate(&pMem
a010: 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  [i]);.    REGIST
a020: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
a030: 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  +i, &pMem[i]);. 
a040: 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c   }.  if( db->mal
a050: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
a060: 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52   no_mem;..  /* R
a070: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57  eturn SQLITE_ROW
a080: 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20  .  */.  p->pc = 
a090: 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53  pc + 1;.  rc = S
a0a0: 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74  QLITE_ROW;.  got
a0b0: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
a0c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e  ../* Opcode: Con
a0d0: 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  cat P1 P2 P3 * *
a0e0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
a0f0: 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a  P3]=r[P2]+r[P1].
a100: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65  **.** Add the te
a110: 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  xt in register P
a120: 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  1 onto the end o
a130: 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a  f the text in.**
a140: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
a150: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
a160: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
a170: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74  ..** If either t
a180: 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78 74  he P1 or P2 text
a190: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73   are NULL then s
a1a0: 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e  tore NULL in P3.
a1b0: 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32  .**.**   P3 = P2
a1c0: 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20   || P1.**.** It 
a1d0: 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50  is illegal for P
a1e0: 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74  1 and P3 to be t
a1f0: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
a200: 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20  . Sometimes,.** 
a210: 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61 6d  if P3 is the sam
a220: 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50 32  e register as P2
a230: 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
a240: 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20  tion is able.** 
a250: 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70  to avoid a memcp
a260: 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  y()..*/.case OP_
a270: 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20  Concat: {       
a280: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
a290: 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69  K_CONCAT, in1, i
a2a0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
a2b0: 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31  4 nByte;..  pIn1
a2c0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
a2d0: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
a2e0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
a2f0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a300: 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
a310: 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69  In1!=pOut );.  i
a320: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
a330: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
a340: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
a350: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
a360: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
a370: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
a380: 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  f( ExpandBlob(pI
a390: 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f  n1) || ExpandBlo
a3a0: 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e  b(pIn2) ) goto n
a3b0: 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69  o_mem;.  Stringi
a3c0: 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  fy(pIn1, encodin
a3d0: 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  g);.  Stringify(
a3e0: 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn2, encoding);
a3f0: 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d  .  nByte = pIn1-
a400: 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  >n + pIn2->n;.  
a410: 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
a420: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
a430: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
a440: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
a450: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
a460: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
a470: 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20  , (int)nByte+2, 
a480: 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20  pOut==pIn2) ){. 
a490: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
a4a0: 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65    }.  MemSetType
a4b0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53  Flag(pOut, MEM_S
a4c0: 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 21  tr);.  if( pOut!
a4d0: 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d  =pIn2 ){.    mem
a4e0: 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e  cpy(pOut->z, pIn
a4f0: 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a  2->z, pIn2->n);.
a500: 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f    }.  memcpy(&pO
a510: 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20  ut->z[pIn2->n], 
a520: 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e  pIn1->z, pIn1->n
a530: 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  );.  pOut->z[nBy
a540: 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  te]=0;.  pOut->z
a550: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
a560: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
a570: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
a580: 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
a590: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
a5a0: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
a5b0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
a5c0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
a5d0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
a5e0: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
a5f0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
a600: 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a  3]=r[P1]+r[P2].*
a610: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c  *.** Add the val
a620: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
a630: 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
a640: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
a650: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
a660: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
a670: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
a680: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
a690: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
a6a0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
a6b0: 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20  de: Multiply P1 
a6c0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
a6d0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
a6e0: 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a  P1]*r[P2].**.**.
a6f0: 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20  ** Multiply the 
a700: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
a710: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
a720: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
a730: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
a740: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
a750: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
a760: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
a770: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
a780: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
a790: 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20  pcode: Subtract 
a7a0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
a7b0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
a7c0: 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]-r[P1].**.
a7d0: 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20  ** Subtract the 
a7e0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
a7f0: 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61  r P1 from the va
a800: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
a810: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
a820: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
a830: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
a840: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
a850: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
a860: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
a870: 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20   Opcode: Divide 
a880: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
a890: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
a8a0: 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]/r[P1].**.
a8b0: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
a8c0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
a8d0: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
a8e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
a8f0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
a900: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
a910: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
a920: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
a930: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
a940: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
a950: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
a960: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
a970: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
a980: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
a990: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
a9a0: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
a9b0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
a9c0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
a9d0: 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]%r[P1].**.** 
a9e0: 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61  Compute the rema
a9f0: 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65  inder after inte
aa00: 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32 20  ger register P2 
aa10: 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a  is divided by .*
aa20: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  * register P1 an
aa30: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
aa40: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
aa50: 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  3. .** If the va
aa60: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
aa70: 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72  P1 is zero the r
aa80: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
aa90: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
aaa0: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
aab0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
aac0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a  .*/.case OP_Add:
aad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aae0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
aaf0: 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  _PLUS, in1, in2,
ab00: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
ab10: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20  _Subtract:      
ab20: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ab30: 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31  as TK_MINUS, in1
ab40: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
ab50: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
ab60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ab70: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52   same as TK_STAR
ab80: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
ab90: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69   */.case OP_Divi
aba0: 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  de:             
abb0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
abc0: 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32  _SLASH, in1, in2
abd0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
abe0: 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20  P_Remainder: {  
abf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ac00: 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c   as TK_REM, in1,
ac10: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
ac20: 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20  char bIntint;   
ac30: 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20 61  /* Started out a
ac40: 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70  s two integer op
ac50: 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36 20  erands */.  u16 
ac60: 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43  flags;      /* C
ac70: 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c  ombined MEM_* fl
ac80: 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e  ags from both in
ac90: 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74 79  puts */.  u16 ty
aca0: 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  pe1;      /* Num
acb0: 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65 66  eric type of lef
acc0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75  t operand */.  u
acd0: 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20 2f  16 type2;      /
ace0: 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f  * Numeric type o
acf0: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
ad00: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20  */.  i64 iA;    
ad10: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
ad20: 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70  value of left op
ad30: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69  erand */.  i64 i
ad40: 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  B;         /* In
ad50: 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72  teger value of r
ad60: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
ad70: 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20    double rA;    
ad80: 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20    /* Real value 
ad90: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
ada0: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20  */.  double rB; 
adb0: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
adc0: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
add0: 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  and */..  pIn1 =
ade0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
adf0: 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65 72  .  type1 = numer
ae00: 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20 20  icType(pIn1);.  
ae10: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
ae20: 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20 3d  ->p2];.  type2 =
ae30: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e   numericType(pIn
ae40: 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2);.  pOut = &aM
ae50: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
ae60: 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61  lags = pIn1->fla
ae70: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
ae80: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20 26  ;.  if( (flags &
ae90: 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20   MEM_Null)!=0 ) 
aea0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
aeb0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
aec0: 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20 74    if( (type1 & t
aed0: 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29 21  ype2 & MEM_Int)!
aee0: 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70  =0 ){.    iA = p
aef0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42  In1->u.i;.    iB
af00: 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
af10: 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20    bIntint = 1;. 
af20: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
af30: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  opcode ){.      
af40: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
af50: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 64     if( sqlite3Ad
af60: 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  dInt64(&iB,iA) )
af70: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
af80: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
af90: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
afa0: 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49 6e  if( sqlite3SubIn
afb0: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
afc0: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
afd0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
afe0: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66 28  P_Multiply:  if(
aff0: 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
b000: 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20  (&iB,iA) ) goto 
b010: 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b  fp_math;  break;
b020: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
b030: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
b040: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
b050: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
b060: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
b070: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
b080: 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f  && iB==SMALLEST_
b090: 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70 5f  INT64 ) goto fp_
b0a0: 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69 42  math;.        iB
b0b0: 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20   /= iA;.        
b0c0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
b0d0: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
b0e0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b0f0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
b100: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
b110: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
b120: 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b  iA==-1 ) iA = 1;
b130: 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20 69  .        iB %= i
b140: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
b150: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
b160: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
b170: 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  iB;.    MemSetTy
b180: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
b190: 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  _Int);.  }else{.
b1a0: 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b      bIntint = 0;
b1b0: 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41  .fp_math:.    rA
b1c0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
b1d0: 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  alValue(pIn1);. 
b1e0: 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56     rB = sqlite3V
b1f0: 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
b200: 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20  2);.    switch( 
b210: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
b220: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64       case OP_Add
b230: 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20  :         rB += 
b240: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
b250: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53  .      case OP_S
b260: 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d  ubtract:    rB -
b270: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
b280: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
b290: 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42  _Multiply:    rB
b2a0: 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   *= rA;       br
b2b0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
b2c0: 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20  OP_Divide: {.   
b2d0: 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29       /* (double)
b2e0: 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c  0 In case of SQL
b2f0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
b300: 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20  G_POINT... */.  
b310: 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64        if( rA==(d
b320: 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61  ouble)0 ) goto a
b330: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
b340: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
b350: 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20    rB /= rA;.    
b360: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
b370: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
b380: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d  : {.        iA =
b390: 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20   (i64)rA;.      
b3a0: 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a    iB = (i64)rB;.
b3b0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b3c0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
b3d0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
b3e0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
b3f0: 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b  iA==-1 ) iA = 1;
b400: 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28 64  .        rB = (d
b410: 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b  ouble)(iB % iA);
b420: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
b430: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69        }.    }.#i
b440: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
b450: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
b460: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
b470: 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  rB;.    MemSetTy
b480: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
b490: 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20  _Int);.#else.   
b4a0: 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61   if( sqlite3IsNa
b4b0: 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67  N(rB) ){.      g
b4c0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
b4d0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
b4e0: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 72     }.    pOut->r
b4f0: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
b500: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
b510: 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69  MEM_Real);.    i
b520: 66 28 20 28 28 74 79 70 65 31 7c 74 79 70 65 32  f( ((type1|type2
b530: 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26  )&MEM_Real)==0 &
b540: 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20  & !bIntint ){.  
b550: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49      sqlite3VdbeI
b560: 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70  ntegerAffinity(p
b570: 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  Out);.    }.#end
b580: 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
b590: 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75  .arithmetic_resu
b5a0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71  lt_is_null:.  sq
b5b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
b5c0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  ull(pOut);.  bre
b5d0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
b5e0: 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a  : CollSeq P1 * *
b5f0: 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   P4.**.** P4 is 
b600: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43  a pointer to a C
b610: 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49  ollSeq struct. I
b620: 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20  f the next call 
b630: 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  to a user functi
b640: 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61  on.** or aggrega
b650: 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33  te calls sqlite3
b660: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29  GetFuncCollSeq()
b670: 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e  , this collation
b680: 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a   sequence will.*
b690: 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54  * be returned. T
b6a0: 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
b6b0: 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28  he built-in min(
b6c0: 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c  ), max() and nul
b6d0: 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f  lif().** functio
b6e0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20  ns..**.** If P1 
b6f0: 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
b700: 6e 20 69 74 20 69 73 20 61 20 72 65 67 69 73 74  n it is a regist
b710: 65 72 20 74 68 61 74 20 61 20 73 75 62 73 65 71  er that a subseq
b720: 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a  uent min() or.**
b730: 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
b740: 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69   will set to 1 i
b750: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
b760: 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e  w is not the min
b770: 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d  imum or.** maxim
b780: 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67 69  um.  The P1 regi
b790: 73 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69  ster is initiali
b7a0: 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68 69 73  zed to 0 by this
b7b0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
b7c0: 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
b7d0: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d  e used by the im
b7e0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
b7f0: 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e  the aforemention
b800: 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  ed functions.** 
b810: 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20  to retrieve the 
b820: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
b830: 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f  ce set by this o
b840: 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61  pcode is not ava
b850: 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63  ilable.** public
b860: 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72  ly, only to user
b870: 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e   functions defin
b880: 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f  ed in func.c..*/
b890: 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71  .case OP_CollSeq
b8a0: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
b8b0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
b8c0: 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70  LLSEQ );.  if( p
b8d0: 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
b8e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
b8f0: 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  nt64(&aMem[pOp->
b900: 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62  p1], 0);.  }.  b
b910: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
b920: 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20  de: Function P1 
b930: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
b940: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66  ynopsis: r[P3]=f
b950: 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  unc(r[P2@P5]).**
b960: 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65  .** Invoke a use
b970: 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69  r function (P4 i
b980: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
b990: 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74   Function struct
b9a0: 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69  ure that.** defi
b9b0: 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  nes the function
b9c0: 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65  ) with P5 argume
b9d0: 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  nts taken from r
b9e0: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a  egister P2 and.*
b9f0: 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54  * successors.  T
ba00: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
ba10: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f   function is sto
ba20: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
ba30: 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  P3..** Register 
ba40: 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f  P3 must not be o
ba50: 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  ne of the functi
ba60: 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a  on inputs..**.**
ba70: 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20   P1 is a 32-bit 
ba80: 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69  bitmask indicati
ba90: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
baa0: 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  t each argument 
bab0: 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74  to the .** funct
bac0: 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e  ion was determin
bad0: 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e  ed to be constan
bae0: 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d  t at compile tim
baf0: 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a  e. If the first.
bb00: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20  ** argument was 
bb10: 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69  constant then bi
bb20: 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74  t 0 of P1 is set
bb30: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74  . This is used t
bb40: 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  o determine.** w
bb50: 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61  hether meta data
bb60: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
bb70: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
bb80: 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20   argument using 
bb90: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73  the.** sqlite3_s
bba0: 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49  et_auxdata() API
bbb0: 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72   may be safely r
bbc0: 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68  etained until th
bbd0: 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61  e next.** invoca
bbe0: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63  tion of this opc
bbf0: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
bc00: 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64  lso: AggStep and
bc10: 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73   AggFinal.*/.cas
bc20: 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b  e OP_Function: {
bc30: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
bc40: 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  *pArg;.  sqlite3
bc50: 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20  _context ctx;.  
bc60: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
bc70: 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a  apVal;.  int n;.
bc80: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
bc90: 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41    apVal = p->apA
bca0: 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70  rg;.  assert( ap
bcb0: 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20  Val || n==0 );. 
bcc0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
bcd0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
bce0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
bcf0: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  or) );.  pOut = 
bd00: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
bd10: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
bd20: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20  ge(p, pOut);..  
bd30: 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20  assert( n==0 || 
bd40: 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f  (pOp->p2>0 && pO
bd50: 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  p->p2+n<=(p->nMe
bd60: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29  m-p->nCursor)+1)
bd70: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
bd80: 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c  p->p3<pOp->p2 ||
bd90: 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
bda0: 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d 20  2+n );.  pArg = 
bdb0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
bdc0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
bdd0: 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20  i++, pArg++){.  
bde0: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
bdf0: 61 6c 69 64 28 70 41 72 67 29 20 29 3b 0a 20 20  alid(pArg) );.  
be00: 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72    apVal[i] = pAr
be10: 67 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  g;.    Deephemer
be20: 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a 20 20 20  alize(pArg);.   
be30: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
be40: 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67 29  pOp->p2+i, pArg)
be50: 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
be60: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
be70: 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 63 74  _FUNCDEF );.  ct
be80: 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70  x.pFunc = pOp->p
be90: 34 2e 70 46 75 6e 63 3b 0a 20 20 63 74 78 2e 69  4.pFunc;.  ctx.i
bea0: 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74 78 2e 70  Op = pc;.  ctx.p
beb0: 56 64 62 65 20 3d 20 70 3b 0a 0a 20 20 2f 2a 20  Vdbe = p;..  /* 
bec0: 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20  The output cell 
bed0: 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65  may already have
bee0: 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61   a buffer alloca
bef0: 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74  ted. Move.  ** t
bf00: 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 63 74  he pointer to ct
bf10: 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74  x.s so in case t
bf20: 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e  he user-function
bf30: 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20 74 68   can use.  ** th
bf40: 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  e already alloca
bf50: 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74 65  ted buffer inste
bf60: 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67  ad of allocating
bf70: 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f   a new one..  */
bf80: 0a 20 20 6d 65 6d 63 70 79 28 26 63 74 78 2e 73  .  memcpy(&ctx.s
bf90: 2c 20 70 4f 75 74 2c 20 73 69 7a 65 6f 66 28 4d  , pOut, sizeof(M
bfa0: 65 6d 29 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  em));.  pOut->fl
bfb0: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
bfc0: 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30    pOut->xDel = 0
bfd0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  ;.  pOut->zMallo
bfe0: 63 20 3d 20 30 3b 0a 20 20 4d 65 6d 53 65 74 54  c = 0;.  MemSetT
bff0: 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c 20  ypeFlag(&ctx.s, 
c000: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74  MEM_Null);..  ct
c010: 78 2e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20  x.fErrorOrAux = 
c020: 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75  0;.  if( ctx.pFu
c030: 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20  nc->funcFlags & 
c040: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
c050: 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
c060: 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20  rt( pOp>aOp );. 
c070: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
c080: 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  1].p4type==P4_CO
c090: 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73  LLSEQ );.    ass
c0a0: 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
c0b0: 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
c0c0: 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c  );.    ctx.pColl
c0d0: 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43   = pOp[-1].p4.pC
c0e0: 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c  oll;.  }.  db->l
c0f0: 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
c100: 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46  owid;.  (*ctx.pF
c110: 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78  unc->xFunc)(&ctx
c120: 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20  , n, apVal); /* 
c130: 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
c140: 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69  30 */.  lastRowi
c150: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
c160: 64 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61  d;..  if( db->ma
c170: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20  llocFailed ){.  
c180: 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68    /* Even though
c190: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20   a malloc() has 
c1a0: 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c  failed, the impl
c1b0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
c1c0: 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66 75  e.    ** user fu
c1d0: 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20  nction may have 
c1e0: 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74 65  called an sqlite
c1f0: 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20 66  3_result_XXX() f
c200: 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74  unction.    ** t
c210: 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65  o return a value
c220: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  . The following 
c230: 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61 6e  call releases an
c240: 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20 20  y resources.    
c250: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
c260: 74 68 20 73 75 63 68 20 61 20 76 61 6c 75 65 2e  th such a value.
c270: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
c280: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
c290: 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67  e(&ctx.s);.    g
c2a0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
c2b0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e  .  /* If the fun
c2c0: 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61  ction returned a
c2d0: 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61  n error, throw a
c2e0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  n exception */. 
c2f0: 20 69 66 28 20 63 74 78 2e 66 45 72 72 6f 72 4f   if( ctx.fErrorO
c300: 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20  rAux ){.    if( 
c310: 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ctx.isError ){. 
c320: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
c330: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
c340: 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
c350: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
c360: 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 20 20  &ctx.s));.      
c370: 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72  rc = ctx.isError
c380: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
c390: 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78  te3VdbeDeleteAux
c3a0: 44 61 74 61 28 70 2c 20 70 63 2c 20 70 4f 70 2d  Data(p, pc, pOp-
c3b0: 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  >p1);.  }..  /* 
c3c0: 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20  Copy the result 
c3d0: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
c3e0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
c3f0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
c400: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
c410: 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67  &ctx.s, encoding
c420: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  );.  assert( pOu
c430: 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75  t->flags==MEM_Nu
c440: 6c 6c 20 29 3b 0a 20 20 6d 65 6d 63 70 79 28 70  ll );.  memcpy(p
c450: 4f 75 74 2c 20 26 63 74 78 2e 73 2c 20 73 69 7a  Out, &ctx.s, siz
c460: 65 6f 66 28 4d 65 6d 29 29 3b 0a 20 20 69 66 28  eof(Mem));.  if(
c470: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
c480: 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20  ooBig(pOut) ){. 
c490: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
c4a0: 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20 20 2f 2a  .  }..#if 0.  /*
c4b0: 20 54 68 65 20 61 70 70 2d 64 65 66 69 6e 65 64   The app-defined
c4c0: 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 64 6f   function has do
c4d0: 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61  ne something tha
c4e0: 74 20 61 73 20 63 61 75 73 65 64 20 74 68 69 73  t as caused this
c4f0: 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  .  ** statement 
c500: 74 6f 20 65 78 70 69 72 65 2e 20 20 28 50 65 72  to expire.  (Per
c510: 68 61 70 73 20 74 68 65 20 66 75 6e 63 74 69 6f  haps the functio
c520: 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69 74 65 33  n called sqlite3
c530: 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20 77 69 74  _exec().  ** wit
c540: 68 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  h a CREATE TABLE
c550: 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a 20 20 2a   statement.).  *
c560: 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72  /.  if( p->expir
c570: 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45  ed ) rc = SQLITE
c580: 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69 66 0a 0a  _ABORT;.#endif..
c590: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
c5a0: 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b  (pOp->p3, pOut);
c5b0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
c5c0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
c5d0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c5e0: 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50  ode: BitAnd P1 P
c5f0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
c600: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
c610: 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  1]&r[P2].**.** T
c620: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
c630: 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
c640: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
c650: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
c660: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
c670: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
c680: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
c690: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
c6a0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
c6b0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .*/./* Opcode: B
c6c0: 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  itOr P1 P2 P3 * 
c6d0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
c6e0: 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32  r[P3]=r[P1]|r[P2
c6f0: 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ].**.** Take the
c700: 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20   bit-wise OR of 
c710: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
c720: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
c730: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
c740: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
c750: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
c760: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
c770: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
c780: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
c790: 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74  pcode: ShiftLeft
c7a0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
c7b0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
c7c0: 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a  ]=r[P2]<<r[P1].*
c7d0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
c7e0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
c7f0: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
c800: 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a  he left by the.*
c810: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
c820: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
c830: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
c840: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
c850: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
c860: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
c870: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
c880: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
c890: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
c8a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
c8b0: 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20  tRight P1 P2 P3 
c8c0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
c8d0: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72    r[P3]=r[P2]>>r
c8e0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
c8f0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
c900: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c910: 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62  2 to the right b
c920: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
c930: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
c940: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
c950: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
c960: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
c970: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
c980: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
c990: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
c9a0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
c9b0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
c9c0: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20  BitAnd:         
c9d0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c9e0: 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e  as TK_BITAND, in
c9f0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
ca00: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
ca30: 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TOR, in1, in2, o
ca40: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
ca50: 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20  hiftLeft:       
ca60: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ca70: 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31  s TK_LSHIFT, in1
ca80: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
ca90: 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68  ase OP_ShiftRigh
caa0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
cab0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48  * same as TK_RSH
cac0: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
cad0: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  ut3 */.  i64 iA;
cae0: 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34  .  u64 uA;.  i64
caf0: 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20   iB;.  u8 op;.. 
cb00: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
cb10: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
cb20: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
cb30: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
cb40: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
cb50: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
cb60: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
cb70: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
cb80: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
cb90: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
cba0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d  reak;.  }.  iA =
cbb0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
cbc0: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42  alue(pIn2);.  iB
cbd0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
cbe0: 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
cbf0: 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  op = pOp->opcode
cc00: 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  ;.  if( op==OP_B
cc10: 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20  itAnd ){.    iA 
cc20: 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  &= iB;.  }else i
cc30: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20  f( op==OP_BitOr 
cc40: 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b  ){.    iA |= iB;
cc50: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21  .  }else if( iB!
cc60: 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
cc70: 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69  ( op==OP_ShiftRi
cc80: 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  ght || op==OP_Sh
cc90: 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20  iftLeft );..    
cca0: 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62  /* If shifting b
ccb0: 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f  y a negative amo
ccc0: 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68  unt, shift in th
ccd0: 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f  e other directio
cce0: 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c  n */.    if( iB<
ccf0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
cd00: 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  t( OP_ShiftRight
cd10: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31  ==OP_ShiftLeft+1
cd20: 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32   );.      op = 2
cd30: 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20  *OP_ShiftLeft + 
cd40: 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42  1 - op;.      iB
cd50: 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69   = iB>(-64) ? -i
cd60: 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20  B : 64;.    }.. 
cd70: 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b     if( iB>=64 ){
cd80: 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e  .      iA = (iA>
cd90: 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  =0 || op==OP_Shi
cda0: 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31  ftLeft) ? 0 : -1
cdb0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
cdc0: 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26     memcpy(&uA, &
cdd0: 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b  iA, sizeof(uA));
cde0: 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f  .      if( op==O
cdf0: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20  P_ShiftLeft ){. 
ce00: 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42         uA <<= iB
ce10: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
ce20: 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42         uA >>= iB
ce30: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67  ;.        /* Sig
ce40: 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69  n-extend on a ri
ce50: 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e  ght shift of a n
ce60: 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a  egative number *
ce70: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  /.        if( iA
ce80: 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75  <0 ) uA |= ((((u
ce90: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c  64)0xffffffff)<<
cea0: 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20  32)|0xffffffff) 
ceb0: 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20  << (64-iB);.    
cec0: 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
ced0: 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f  (&iA, &uA, sizeo
cee0: 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20  f(iA));.    }.  
cef0: 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
cf00: 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  iA;.  MemSetType
cf10: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
cf20: 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
cf30: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49  ./* Opcode: AddI
cf40: 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mm  P1 P2 * * *.
cf50: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
cf60: 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20  P1]=r[P1]+P2.** 
cf70: 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73  .** Add the cons
cf80: 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76  tant P2 to the v
cf90: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
cfa0: 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75   P1..** The resu
cfb0: 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20  lt is always an 
cfc0: 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  integer..**.** T
cfd0: 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69  o force any regi
cfe0: 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e  ster to be an in
cff0: 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20  teger, just add 
d000: 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64  0..*/.case OP_Ad
d010: 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20  dImm: {         
d020: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
d030: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
d040: 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p1];.  memAbout
d050: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
d060: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
d070: 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
d080: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  n1);.  pIn1->u.i
d090: 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62   += pOp->p2;.  b
d0a0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d0b0: 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31  de: MustBeInt P1
d0c0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a   P2 * * *.** .**
d0d0: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
d0e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
d0f0: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
d100: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
d110: 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20  ** in P1 is not 
d120: 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63  an integer and c
d130: 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
d140: 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
d150: 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61  er.** without da
d160: 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75  ta loss, then ju
d170: 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
d180: 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d  o P2, or if P2==
d190: 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51  0.** raise an SQ
d1a0: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78  LITE_MISMATCH ex
d1b0: 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ception..*/.case
d1c0: 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b   OP_MustBeInt: {
d1d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
d1e0: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
d1f0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
d200: 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
d210: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
d220: 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70  t)==0 ){.    app
d230: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
d240: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
d250: 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  RIC, encoding);.
d260: 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
d270: 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73  ken((pIn1->flags
d280: 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29  &MEM_Int)==0, 2)
d290: 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
d2a0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
d2b0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
d2c0: 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a  ( pOp->p2==0 ){.
d2d0: 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
d2e0: 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20  ITE_MISMATCH;.  
d2f0: 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
d300: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
d310: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
d320: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
d330: 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72   - 1;.        br
d340: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
d350: 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54   }.  }.  MemSetT
d360: 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45  ypeFlag(pIn1, ME
d370: 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
d380: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
d390: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
d3a0: 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  _POINT./* Opcode
d3b0: 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50  : RealAffinity P
d3c0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
d3d0: 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68  If register P1 h
d3e0: 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20  olds an integer 
d3f0: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
d400: 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a  real value..**.*
d410: 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
d420: 20 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61   used when extra
d430: 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  cting informatio
d440: 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20  n from a column 
d450: 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c  that.** has REAL
d460: 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68   affinity.  Such
d470: 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d   column values m
d480: 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72  ay still be stor
d490: 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72  ed as.** integer
d4a0: 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66  s, for space eff
d4b0: 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74  iciency, but aft
d4c0: 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65  er extraction we
d4d0: 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f   want them.** to
d4e0: 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61   have only a rea
d4f0: 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65  l value..*/.case
d500: 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79   OP_RealAffinity
d510: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
d520: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
d530: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d540: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
d550: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d560: 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Int ){.    sqlit
d570: 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79  e3VdbeMemRealify
d580: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
d590: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
d5a0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d5b0: 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64  IT_CAST./* Opcod
d5c0: 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a  e: ToText P1 * *
d5d0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
d5e0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
d5f0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
d600: 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20  text..** If the 
d610: 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63  value is numeric
d620: 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  , convert it to 
d630: 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74  a string using t
d640: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
d650: 20 6f 66 20 73 70 72 69 6e 74 66 28 29 2e 20 20   of sprintf().  
d660: 42 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20  Blob values are 
d670: 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a  unchanged and.**
d680: 20 61 72 65 20 61 66 74 65 72 77 61 72 64 73 20   are afterwards 
d690: 73 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74  simply interpret
d6a0: 65 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a  ed as text..**.*
d6b0: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
d6c0: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
d6d0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
d6e0: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
d6f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65  .*/.case OP_ToTe
d700: 78 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  xt: {           
d710: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d720: 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e  s TK_TO_TEXT, in
d730: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
d740: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
d750: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
d760: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28  (p, pIn1);.  if(
d770: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
d780: 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b  EM_Null ) break;
d790: 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53  .  assert( MEM_S
d7a0: 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33  tr==(MEM_Blob>>3
d7b0: 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  ) );.  pIn1->fla
d7c0: 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  gs |= (pIn1->fla
d7d0: 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b  gs&MEM_Blob)>>3;
d7e0: 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  .  applyAffinity
d7f0: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
d800: 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67  F_TEXT, encoding
d810: 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
d820: 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73  Blob(pIn1);.  as
d830: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
d840: 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64  s & MEM_Str || d
d850: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
d860: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
d870: 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45   &= ~(MEM_Int|ME
d880: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c  M_Real|MEM_Blob|
d890: 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44  MEM_Zero);.  UPD
d8a0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
d8b0: 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b  (pIn1);.  break;
d8c0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
d8d0: 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a  oBlob P1 * * * *
d8e0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
d8f0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d900: 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c  er P1 to be a BL
d910: 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  OB..** If the va
d920: 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20  lue is numeric, 
d930: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
d940: 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a  string first..**
d950: 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d   Strings are sim
d960: 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74 65  ply reinterprete
d970: 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20  d as blobs with 
d980: 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20  no change.** to 
d990: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
d9a0: 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ata..**.** A NUL
d9b0: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
d9c0: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
d9d0: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
d9e0: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
d9f0: 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20  e OP_ToBlob: {  
da00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da10: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
da20: 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20  _BLOB, in1 */.  
da30: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
da40: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
da50: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
da60: 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69  ull ) break;.  i
da70: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
da80: 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29  & MEM_Blob)==0 )
da90: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
daa0: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
dab0: 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64  _AFF_TEXT, encod
dac0: 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ing);.    assert
dad0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
dae0: 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d  MEM_Str || db->m
daf0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
db00: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
db10: 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pIn1, MEM_Blob
db20: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
db30: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pIn1->flags &= ~
db40: 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d  (MEM_TypeMask&~M
db50: 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20  EM_Blob);.  }.  
db60: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
db70: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  IZE(pIn1);.  bre
db80: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
db90: 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a  : ToNumeric P1 *
dba0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
dbb0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
dbc0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
dbd0: 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65  e numeric (eithe
dbe0: 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20  r an.** integer 
dbf0: 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  or a floating-po
dc00: 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20  int number.).** 
dc10: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
dc20: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72  text or blob, tr
dc30: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  y to convert it 
dc40: 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a  to an using the.
dc50: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
dc60: 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28   atoi() or atof(
dc70: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
dc80: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
dc90: 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69  ion .** is possi
dca0: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ble..**.** A NUL
dcb0: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
dcc0: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
dcd0: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
dce0: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
dcf0: 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20  e OP_ToNumeric: 
dd00: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
dd10: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
dd20: 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31  _TO_NUMERIC, in1
dd30: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
dd40: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73  em[pOp->p1];.  s
dd50: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d  qlite3VdbeMemNum
dd60: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 62  erify(pIn1);.  b
dd70: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
dd80: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  * SQLITE_OMIT_CA
dd90: 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ST */../* Opcode
dda0: 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a  : ToInt P1 * * *
ddb0: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
ddc0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
ddd0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e  ster P1 to be an
dde0: 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a   integer.  If.**
ddf0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75   The value is cu
de00: 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e  rrently a real n
de10: 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20  umber, drop its 
de20: 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e  fractional part.
de30: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
de40: 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62   is text or blob
de50: 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  , try to convert
de60: 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65   it to an intege
de70: 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  r using the.** e
de80: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f  quivalent of ato
de90: 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20  i() and store 0 
dea0: 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65  if no such conve
deb0: 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c  rsion is possibl
dec0: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
ded0: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
dee0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
def0: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
df00: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
df10: 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20  OP_ToInt: {     
df20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
df30: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e  same as TK_TO_IN
df40: 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  T, in1 */.  pIn1
df50: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
df60: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
df70: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
df80: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
df90: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
dfa0: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  rify(pIn1);.  }.
dfb0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20    break;.}..#if 
dfc0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
dfd0: 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21 64  OMIT_CAST) && !d
dfe0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
dff0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
e000: 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  T)./* Opcode: To
e010: 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Real P1 * * * *.
e020: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
e030: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
e040: 72 20 50 31 20 74 6f 20 62 65 20 61 20 66 6c 6f  r P1 to be a flo
e050: 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
e060: 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76 61  er..** If The va
e070: 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79  lue is currently
e080: 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e   an integer, con
e090: 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74  vert it..** If t
e0a0: 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74  he value is text
e0b0: 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f   or blob, try to
e0c0: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
e0d0: 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20  n integer using 
e0e0: 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  the.** equivalen
e0f0: 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20  t of atoi() and 
e100: 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f 20  store 0.0 if no 
e110: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
e120: 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a  is possible..**.
e130: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
e140: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
e150: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
e160: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
e170: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52  ..*/.case OP_ToR
e180: 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eal: {          
e190: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
e1a0: 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69  as TK_TO_REAL, i
e1b0: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
e1c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
e1d0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
e1e0: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66  e(p, pIn1);.  if
e1f0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
e200: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
e210: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
e220: 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29  MemRealify(pIn1)
e230: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
e240: 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
e250: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
e260: 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  CAST) && !define
e270: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
e280: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f  OATING_POINT) */
e290: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20  ../* Opcode: Lt 
e2a0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e2b0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
e2c0: 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f 20  [P1]<r[P3] goto 
e2d0: 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  P2.**.** Compare
e2e0: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
e2f0: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
e300: 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c 72  3.  If reg(P3)<r
e310: 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a  eg(P1) then.** j
e320: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
e330: 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  2.  .**.** If th
e340: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
e350: 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73  ULL bit of P5 is
e360: 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72 20   set and either 
e370: 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65  reg(P1) or.** re
e380: 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68  g(P3) is NULL th
e390: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
e3a0: 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  .  If the SQLITE
e3b0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20  _JUMPIFNULL .** 
e3c0: 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68 65  bit is clear the
e3d0: 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  n fall through i
e3e0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
e3f0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   is NULL..**.** 
e400: 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
e410: 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50  ASK portion of P
e420: 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66  5 must be an aff
e430: 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20  inity character 
e440: 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  -.** SQLITE_AFF_
e450: 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46  TEXT, SQLITE_AFF
e460: 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f  _INTEGER, and so
e470: 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d   forth. An attem
e480: 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74  pt is made .** t
e490: 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e  o coerce both in
e4a0: 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74  puts according t
e4b0: 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20  o this affinity 
e4c0: 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f  before the.** co
e4d0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65  mparison is made
e4e0: 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  . If the SQLITE_
e4f0: 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30  AFF_MASK is 0x00
e500: 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a  , then numeric.*
e510: 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73  * affinity is us
e520: 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ed. Note that th
e530: 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65  e affinity conve
e540: 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65  rsions are store
e550: 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74  d.** back into t
e560: 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
e570: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53  rs P1 and P3.  S
e580: 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61  o this opcode ca
e590: 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69  n cause.** persi
e5a0: 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f  stent changes to
e5b0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
e5c0: 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65  d P3..**.** Once
e5d0: 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73   any conversions
e5e0: 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63   have taken plac
e5f0: 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76  e, and neither v
e600: 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a  alue is NULL, .*
e610: 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  * the values are
e620: 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f   compared. If bo
e630: 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c  th values are bl
e640: 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28  obs then memcmp(
e650: 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  ) is.** used to 
e660: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65  determine the re
e670: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d  sults of the com
e680: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74  parison.  If bot
e690: 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  h values.** are 
e6a0: 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61  text, then the a
e6b0: 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61  ppropriate colla
e6c0: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70  ting function sp
e6d0: 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34  ecified in.** P4
e6e0: 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20   is  used to do 
e6f0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
e700: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70   If P4 is not sp
e710: 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20  ecified then.** 
e720: 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64  memcmp() is used
e730: 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
e740: 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74   string.  If bot
e750: 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20  h values are.** 
e760: 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20  numeric, then a 
e770: 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73  numeric comparis
e780: 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74  on is used. If t
e790: 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a  he two values.**
e7a0: 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e   are of differen
e7b0: 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75  t types, then nu
e7c0: 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64  mbers are consid
e7d0: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a  ered less than.*
e7e0: 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74  * strings and st
e7f0: 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64  rings are consid
e800: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62  ered less than b
e810: 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  lobs..**.** If t
e820: 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  he SQLITE_STOREP
e830: 32 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73  2 bit of P5 is s
e840: 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20  et, then do not 
e850: 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a  jump.  Instead,.
e860: 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65  ** store a boole
e870: 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68 65  an result (eithe
e880: 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55  r 0, or 1, or NU
e890: 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72 20  LL) in register 
e8a0: 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P2..**.** If the
e8b0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 62   SQLITE_NULLEQ b
e8c0: 69 74 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c  it is set in P5,
e8d0: 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75 65   then NULL value
e8e0: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
e8f0: 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65  .** equal to one
e900: 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69 64   another, provid
e910: 65 64 20 74 68 61 74 20 74 68 65 79 20 64 6f 20  ed that they do 
e920: 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72 20 4d  not have their M
e930: 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62 69  EM_Cleared.** bi
e940: 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  t set..*/./* Opc
e950: 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33  ode: Ne P1 P2 P3
e960: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
e970: 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72 5b  is: if r[P1]!=r[
e980: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
e990: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
e9a0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
e9b0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
e9c0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
e9d0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
e9e0: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
e9f0: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
ea00: 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65   not equal.  See
ea10: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
ea20: 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  or.** additional
ea30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
ea40: 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55  .** If SQLITE_NU
ea50: 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50  LLEQ is set in P
ea60: 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  5 then the resul
ea70: 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  t of comparison 
ea80: 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  is always either
ea90: 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73  .** true or fals
eaa0: 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e  e and is never N
eab0: 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70  ULL.  If both op
eac0: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
ead0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a  then the result.
eae0: 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  ** of comparison
eaf0: 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20 65   is false.  If e
eb00: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
eb10: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
eb20: 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a  esult is true..*
eb30: 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65  * If neither ope
eb40: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
eb50: 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73   result is the s
eb60: 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20  ame as it would 
eb70: 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c  be if.** the SQL
eb80: 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20  ITE_NULLEQ flag 
eb90: 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f  were omitted fro
eba0: 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  m P5..*/./* Opco
ebb0: 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20  de: Eq P1 P2 P3 
ebc0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
ebd0: 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b 50  s: if r[P1]==r[P
ebe0: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
ebf0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
ec00: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
ec10: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
ec20: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
ec30: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72  n if.** the oper
ec40: 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72  ands in register
ec50: 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20  s P1 and P3 are 
ec60: 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68  equal..** See th
ec70: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
ec80: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
ec90: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  mation..**.** If
eca0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
ecb0: 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e  s set in P5 then
ecc0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
ecd0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77  omparison is alw
ece0: 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72  ays either.** tr
ecf0: 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20  ue or false and 
ed00: 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20  is never NULL.  
ed10: 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  If both operands
ed20: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74   are NULL then t
ed30: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20  he result.** of 
ed40: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72  comparison is tr
ed50: 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f  ue.  If either o
ed60: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
ed70: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
ed80: 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e  s false..** If n
ed90: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
eda0: 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c  s NULL the resul
edb0: 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  t is the same as
edc0: 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a   it would be if.
edd0: 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55  ** the SQLITE_NU
ede0: 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f  LLEQ flag were o
edf0: 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a  mitted from P5..
ee00: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65  */./* Opcode: Le
ee10: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
ee20: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
ee30: 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74  r[P1]<=r[P3] got
ee40: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
ee50: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
ee60: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
ee70: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
ee80: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
ee90: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
eea0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
eeb0: 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
eec0: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
eed0: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
eee0: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
eef0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
ef00: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
ef10: 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
ef20: 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50 34  : Gt P1 P2 P3 P4
ef30: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
ef40: 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d 20   if r[P1]>r[P3] 
ef50: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
ef60: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
ef70: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
ef80: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
ef90: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
efa0: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
efb0: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
efc0: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
efd0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
efe0: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
eff0: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
f000: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
f010: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
f020: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50  ./* Opcode: Ge P
f030: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
f040: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
f050: 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f 20  P1]>=r[P3] goto 
f060: 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P2.**.** This wo
f070: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
f080: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
f090: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
f0a0: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
f0b0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
f0c0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72  egister P3 is gr
f0d0: 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
f0e0: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
f0f0: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
f100: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
f110: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
f120: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
f130: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
f140: 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Eq:             
f150: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f160: 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  EQ, jump, in1, i
f170: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  n3 */.case OP_Ne
f180: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
f190: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45  /* same as TK_NE
f1a0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f1b0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20   */.case OP_Lt: 
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f1d0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20   same as TK_LT, 
f1e0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f1f0: 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20  /.case OP_Le:   
f200: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f210: 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75  ame as TK_LE, ju
f220: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f230: 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20  case OP_Gt:     
f240: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f250: 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70  e as TK_GT, jump
f260: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
f270: 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20  se OP_Ge: {     
f280: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f290: 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20  as TK_GE, jump, 
f2a0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
f2b0: 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
f2c0: 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74    /* Result of t
f2d0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  he comparison of
f2e0: 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49   pIn1 against pI
f2f0: 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  n3 */.  char aff
f300: 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41  inity;      /* A
f310: 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66  ffinity to use f
f320: 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f  or comparison */
f330: 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20  .  u16 flags1;  
f340: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
f350: 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  f initial value 
f360: 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a  of pIn1->flags *
f370: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20  /.  u16 flags3; 
f380: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
f390: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
f3a0: 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20   of pIn3->flags 
f3b0: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
f3c0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
f3d0: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
f3e0: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d  >p3];.  flags1 =
f3f0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn1->flags;.  
f400: 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66  flags3 = pIn3->f
f410: 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61  lags;.  if( (fla
f420: 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45  gs1 | flags3)&ME
f430: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a  M_Null ){.    /*
f440: 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65   One or both ope
f450: 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a  rands are NULL *
f460: 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  /.    if( pOp->p
f470: 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  5 & SQLITE_NULLE
f480: 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66  Q ){.      /* If
f490: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
f4a0: 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69 6c  s set (which wil
f4b0: 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66  l only happen if
f4c0: 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73   the operator is
f4d0: 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20  .      ** OP_Eq 
f4e0: 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74  or OP_Ne) then t
f4f0: 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20  ake the jump or 
f500: 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  not depending on
f510: 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a   whether.      *
f520: 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70  * or not both op
f530: 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e  erands are null.
f540: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
f550: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
f560: 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f  ode==OP_Eq || pO
f570: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
f580: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
f590: 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  ( (flags1 & MEM_
f5a0: 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20  Cleared)==0 );. 
f5b0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4f       assert( (pO
f5c0: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a  p->p5 & SQLITE_J
f5d0: 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b  UMPIFNULL)==0 );
f5e0: 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67  .      if( (flag
f5f0: 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s1&MEM_Null)!=0.
f600: 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
f610: 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20  3&MEM_Null)!=0. 
f620: 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33        && (flags3
f630: 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30  &MEM_Cleared)==0
f640: 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
f650: 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 52    res = 0;  /* R
f660: 65 73 75 6c 74 73 20 61 72 65 20 65 71 75 61 6c  esults are equal
f670: 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   */.      }else{
f680: 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31  .        res = 1
f690: 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72  ;  /* Results ar
f6a0: 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20  e not equal */. 
f6b0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
f6c0: 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54  {.      /* SQLIT
f6d0: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61  E_NULLEQ is clea
f6e0: 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f  r and at least o
f6f0: 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  ne operand is NU
f700: 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  LL,.      ** the
f710: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
f720: 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20  always NULL..   
f730: 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69     ** The jump i
f740: 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53  s taken if the S
f750: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
f760: 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20   bit is set..   
f770: 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
f780: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
f790: 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
f7a0: 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
f7b0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
f7c0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
f7d0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
f7e0: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
f7f0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
f800: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  2, pOut);.      
f810: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56  }else{.        V
f820: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32  dbeBranchTaken(2
f830: 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ,3);.        if(
f840: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
f850: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a  E_JUMPIFNULL ){.
f860: 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70            pc = p
f870: 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20 20  Op->p2-1;.      
f880: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
f890: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
f8a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e   }else{.    /* N
f8b0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
f8c0: 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f  s NULL.  Do a co
f8d0: 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20  mparison. */.   
f8e0: 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d   affinity = pOp-
f8f0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46  >p5 & SQLITE_AFF
f900: 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61  _MASK;.    if( a
f910: 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20  ffinity ){.     
f920: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
f930: 49 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  In1, affinity, e
f940: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20  ncoding);.      
f950: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
f960: 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  n3, affinity, en
f970: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 69  coding);.      i
f980: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
f990: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
f9a0: 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73  m;.    }..    as
f9b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
f9c0: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c  e==P4_COLLSEQ ||
f9d0: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d   pOp->p4.pColl==
f9e0: 30 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42  0 );.    ExpandB
f9f0: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 45  lob(pIn1);.    E
fa00: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b  xpandBlob(pIn3);
fa10: 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74  .    res = sqlit
fa20: 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e  e3MemCompare(pIn
fa30: 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34  3, pIn1, pOp->p4
fa40: 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73  .pColl);.  }.  s
fa50: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
fa60: 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f  de ){.    case O
fa70: 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Eq:    res = r
fa80: 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es==0;     break
fa90: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65  ;.    case OP_Ne
faa0: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d  :    res = res!=
fab0: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
fac0: 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20    case OP_Lt:   
fad0: 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20   res = res<0;   
fae0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
faf0: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73  se OP_Le:    res
fb00: 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62   = res<=0;     b
fb10: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
fb20: 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Gt:    res = r
fb30: 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es>0;      break
fb40: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
fb50: 20 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d       res = res>=
fb60: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
fb70: 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  }..  if( pOp->p5
fb80: 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
fb90: 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20  2 ){.    pOut = 
fba0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
fbb0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
fbc0: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
fbd0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
fbe0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
fbf0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
fc00: 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53  = res;.    REGIS
fc10: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
fc20: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73  2, pOut);.  }els
fc30: 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
fc40: 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28  hTaken(res!=0, (
fc50: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
fc60: 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20  _NULLEQ)?2:3);. 
fc70: 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
fc80: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
fc90: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  -1;.    }.  }.  
fca0: 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e  /* Undo any chan
fcb0: 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c  ges made by appl
fcc0: 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74  yAffinity() to t
fcd0: 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
fce0: 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66  rs. */.  pIn1->f
fcf0: 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e 66 6c  lags = (pIn1->fl
fd00: 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73  ags&~MEM_TypeMas
fd10: 6b 29 20 7c 20 28 66 6c 61 67 73 31 26 4d 45 4d  k) | (flags1&MEM
fd20: 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 70 49  _TypeMask);.  pI
fd30: 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e  n3->flags = (pIn
fd40: 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79  3->flags&~MEM_Ty
fd50: 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
fd60: 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b  3&MEM_TypeMask);
fd70: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
fd80: 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
fd90: 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
fda0: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
fdb0: 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79  mutation used by
fdc0: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20   the OP_Compare 
fdd0: 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74  operator to be t
fde0: 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69  he array.** of i
fdf0: 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a  ntegers in P4..*
fe00: 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61  *.** The permuta
fe10: 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c  tion is only val
fe20: 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  id until the nex
fe30: 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61  t OP_Compare tha
fe40: 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46  t has.** the OPF
fe50: 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
fe60: 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63  set in P5. Typic
fe70: 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d  ally the OP_Perm
fe80: 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a  utation should .
fe90: 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61  ** occur immedia
fea0: 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68  tely prior to th
feb0: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f  e OP_Compare..*/
fec0: 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61  .case OP_Permuta
fed0: 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74  tion: {.  assert
fee0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
fef0: 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20  4_INTARRAY );.  
ff00: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
ff10: 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65  ai );.  aPermute
ff20: 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
ff30: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
ff40: 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31  code: Compare P1
ff50: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
ff60: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50  Synopsis: r[P1@P
ff70: 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a  3] <-> r[P2@P3].
ff80: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77  **.** Compare tw
ff90: 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67  o vectors of reg
ffa0: 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31  isters in reg(P1
ffb0: 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20  )..reg(P1+P3-1) 
ffc0: 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65  (call this.** ve
ffd0: 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e  ctor "A") and in
ffe0: 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32   reg(P2)..reg(P2
fff0: 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53  +P3-1) ("B").  S
10000 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ave the result o
10010 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  f.** the compari
10020 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74  son for use by t
10030 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20  he next OP_Jump 
10040 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20  instruct..**.** 
10050 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
10060 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
10070 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f   set, then the o
10080 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73  rder of comparis
10090 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69  on is.** determi
100a0 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20  ned by the most 
100b0 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74  recent OP_Permut
100c0 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20  ation operator. 
100d0 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41   If the.** OPFLA
100e0 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73  G_PERMUTE bit is
100f0 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67   clear, then reg
10100 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72  ister are compar
10110 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c  ed in sequential
10120 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a  .** order..**.**
10130 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f   P4 is a KeyInfo
10140 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
10150 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e  defines collatin
10160 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20  g sequences and 
10170 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66  sort.** orders f
10180 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  or the compariso
10190 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74  n.  The permutat
101a0 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72  ion applies to r
101b0 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79  egisters.** only
101c0 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65  .  The KeyInfo e
101d0 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64  lements are used
101e0 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a   sequentially..*
101f0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69  *.** The compari
10200 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f  son is a sort co
10210 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c  mparison, so NUL
10220 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  Ls compare equal
10230 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c  ,.** NULLs are l
10240 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73  ess than numbers
10250 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65  , numbers are le
10260 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c  ss than strings,
10270 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20  .** and strings 
10280 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  are less than bl
10290 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  obs..*/.case OP_
102a0 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74  Compare: {.  int
102b0 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69   n;.  int i;.  i
102c0 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b  nt p1;.  int p2;
102d0 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f  .  const KeyInfo
102e0 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
102f0 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71  t idx;.  CollSeq
10300 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43   *pColl;    /* C
10310 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10320 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73  e to use on this
10330 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62   term */.  int b
10340 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Rev;          /*
10350 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e   True for DESCEN
10360 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20  DING sort order 
10370 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e  */..  if( (pOp->
10380 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d  p5 & OPFLAG_PERM
10390 55 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d 75  UTE)==0 ) aPermu
103a0 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f  te = 0;.  n = pO
103b0 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66  p->p3;.  pKeyInf
103c0 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
103d0 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
103e0 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  n>0 );.  assert(
103f0 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a   pKeyInfo!=0 );.
10400 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
10410 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
10420 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  #if SQLITE_DEBUG
10430 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20  .  if( aPermute 
10440 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78  ){.    int k, mx
10450 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d   = 0;.    for(k=
10460 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28  0; k<n; k++) if(
10470 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20   aPermute[k]>mx 
10480 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b  ) mx = aPermute[
10490 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  k];.    assert( 
104a0 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28  p1>0 && p1+mx<=(
104b0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
104c0 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  or)+1 );.    ass
104d0 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
104e0 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  mx<=(p->nMem-p->
104f0 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
10500 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
10510 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c  t( p1>0 && p1+n<
10520 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
10530 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61  rsor)+1 );.    a
10540 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
10550 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  2+n<=(p->nMem-p-
10560 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
10570 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
10580 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66  ITE_DEBUG */.  f
10590 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
105a0 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65  ){.    idx = aPe
105b0 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65  rmute ? aPermute
105c0 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73  [i] : i;.    ass
105d0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
105e0 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29  &aMem[p1+idx]) )
105f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
10600 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
10610 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52  2+idx]) );.    R
10620 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31  EGISTER_TRACE(p1
10630 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69  +idx, &aMem[p1+i
10640 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  dx]);.    REGIST
10650 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c  ER_TRACE(p2+idx,
10660 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b   &aMem[p2+idx]);
10670 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70  .    assert( i<p
10680 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20  KeyInfo->nField 
10690 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70  );.    pColl = p
106a0 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69  KeyInfo->aColl[i
106b0 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b  ];.    bRev = pK
106c0 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64  eyInfo->aSortOrd
106d0 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70  er[i];.    iComp
106e0 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  are = sqlite3Mem
106f0 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31  Compare(&aMem[p1
10700 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b  +idx], &aMem[p2+
10710 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20  idx], pColl);.  
10720 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29    if( iCompare )
10730 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76  {.      if( bRev
10740 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69   ) iCompare = -i
10750 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62  Compare;.      b
10760 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
10770 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a    aPermute = 0;.
10780 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
10790 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50  pcode: Jump P1 P
107a0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
107b0 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72  ump to the instr
107c0 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73  uction at addres
107d0 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20  s P1, P2, or P3 
107e0 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
107f0 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d  ther.** in the m
10800 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f  ost recent OP_Co
10810 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f  mpare instructio
10820 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20  n the P1 vector 
10830 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  was less than.**
10840 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72   equal to, or gr
10850 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50  eater than the P
10860 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63  2 vector, respec
10870 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20  tively..*/.case 
10880 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20  OP_Jump: {      
10890 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
108a0 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65  /.  if( iCompare
108b0 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  <0 ){.    pc = p
108c0 4f 70 2d 3e 70 31 20 2d 20 31 3b 20 20 56 64 62  Op->p1 - 1;  Vdb
108d0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 33  eBranchTaken(0,3
108e0 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  );.  }else if( i
108f0 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20  Compare==0 ){.  
10900 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
10910 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54   1;  VdbeBranchT
10920 61 6b 65 6e 28 31 2c 33 29 3b 0a 20 20 7d 65 6c  aken(1,3);.  }el
10930 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70  se{.    pc = pOp
10940 2d 3e 70 33 20 2d 20 31 3b 20 20 56 64 62 65 42  ->p3 - 1;  VdbeB
10950 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
10960 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
10970 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20  ./* Opcode: And 
10980 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
10990 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
109a0 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29  (r[P1] && r[P2])
109b0 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
109c0 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74  logical AND of t
109d0 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
109e0 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32  isters P1 and P2
109f0 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68   and.** write th
10a00 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65  e result into re
10a10 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
10a20 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72   If either P1 or
10a30 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29   P2 is 0 (false)
10a40 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
10a50 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a   is 0 even if.**
10a60 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
10a70 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
10a80 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77  L and true or tw
10a90 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20  o NULLs give.** 
10aa0 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
10ab0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20  /./* Opcode: Or 
10ac0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
10ad0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
10ae0 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29  (r[P1] || r[P2])
10af0 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
10b00 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68  logical OR of th
10b10 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
10b20 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
10b30 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
10b40 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74  answer in regist
10b50 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
10b60 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
10b70 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65  is nonzero (true
10b80 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
10b90 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a  t is 1 (true).**
10ba0 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68   even if the oth
10bb0 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
10bc0 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61  .  A NULL and fa
10bd0 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  lse or two NULLs
10be0 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20  .** give a NULL 
10bf0 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
10c00 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20  OP_And:         
10c10 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
10c20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  TK_AND, in1, in2
10c30 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
10c40 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Or: {         
10c50 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
10c60 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  K_OR, in1, in2, 
10c70 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31  out3 */.  int v1
10c80 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65  ;    /* Left ope
10c90 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c  rand:  0==FALSE,
10ca0 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
10cb0 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
10cc0 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20    int v2;    /* 
10cd0 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30  Right operand: 0
10ce0 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
10cf0 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
10d00 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  NULL */..  pIn1 
10d10 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
10d20 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
10d30 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
10d40 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20  {.    v1 = 2;.  
10d50 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20  }else{.    v1 = 
10d60 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
10d70 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20  lue(pIn1)!=0;.  
10d80 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  }.  pIn2 = &aMem
10d90 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
10da0 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
10db0 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76  EM_Null ){.    v
10dc0 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2 = 2;.  }else{.
10dd0 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33      v2 = sqlite3
10de0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
10df0 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28  2)!=0;.  }.  if(
10e00 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
10e10 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74  _And ){.    stat
10e20 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
10e30 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63  d char and_logic
10e40 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20  [] = { 0, 0, 0, 
10e50 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32  0, 1, 2, 0, 2, 2
10e60 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64   };.    v1 = and
10e70 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b  _logic[v1*3+v2];
10e80 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74  .  }else{.    st
10e90 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
10ea0 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69  ned char or_logi
10eb0 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c  c[] = { 0, 1, 2,
10ec0 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20   1, 1, 1, 2, 1, 
10ed0 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72  2 };.    v1 = or
10ee0 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b  _logic[v1*3+v2];
10ef0 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61  .  }.  pOut = &a
10f00 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
10f10 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20  if( v1==2 ){.   
10f20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
10f30 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
10f40 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f  .  }else{.    pO
10f50 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20  ut->u.i = v1;.  
10f60 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
10f70 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
10f80 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
10f90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20  ./* Opcode: Not 
10fa0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
10fb0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20  ynopsis: r[P2]= 
10fc0 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74  !r[P1].**.** Int
10fd0 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65  erpret the value
10fe0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
10ff0 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  as a boolean val
11000 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a  ue.  Store the.*
11010 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65  * boolean comple
11020 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72  ment in register
11030 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c   P2.  If the val
11040 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
11050 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74  1 is .** NULL, t
11060 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74  hen a NULL is st
11070 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  ored in P2..*/.c
11080 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20  ase OP_Not: {   
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
110a0 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20  same as TK_NOT, 
110b0 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  in1, out2 */.  p
110c0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
110d0 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
110e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
110f0 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
11100 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
11110 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
11120 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
11130 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
11140 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
11150 74 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69 74  t64(pOut, !sqlit
11160 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
11170 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65  In1));.  }.  bre
11180 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11190 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a  : BitNot P1 P2 *
111a0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
111b0 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a  : r[P1]= ~r[P1].
111c0 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
111d0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
111e0 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e  egister P1 as an
111f0 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65   integer.  Store
11200 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d   the.** ones-com
11210 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50  plement of the P
11220 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  1 value into reg
11230 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31  ister P2.  If P1
11240 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c   holds.** a NULL
11250 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55   then store a NU
11260 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  LL in P2..*/.cas
11270 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20  e OP_BitNot: {  
11280 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
11290 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c  me as TK_BITNOT,
112a0 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
112b0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
112c0 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
112d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
112e0 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
112f0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
11300 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
11310 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
11320 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
11330 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
11340 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69  nt64(pOut, ~sqli
11350 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
11360 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72  pIn1));.  }.  br
11370 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11380 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20  e: Once P1 P2 * 
11390 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  * *.**.** Check 
113a0 74 68 65 20 22 6f 6e 63 65 22 20 66 6c 61 67 20  the "once" flag 
113b0 6e 75 6d 62 65 72 20 50 31 2e 20 49 66 20 69 74  number P1. If it
113c0 20 69 73 20 73 65 74 2c 20 6a 75 6d 70 20 74 6f   is set, jump to
113d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
113e0 20 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20   .** Otherwise, 
113f0 73 65 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64  set the flag and
11400 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
11410 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
11420 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74 68  ction..** In oth
11430 65 72 20 77 6f 72 64 73 2c 20 74 68 69 73 20 6f  er words, this o
11440 70 63 6f 64 65 20 63 61 75 73 65 73 20 61 6c 6c  pcode causes all
11450 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64   following opcod
11460 65 73 20 75 70 20 74 68 72 6f 75 67 68 20 50 32  es up through P2
11470 0a 2a 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e 63  .** (but not inc
11480 6c 75 64 69 6e 67 20 50 32 29 20 74 6f 20 72 75  luding P2) to ru
11490 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64 20  n just once and 
114a0 74 6f 20 62 65 20 73 6b 69 70 70 65 64 20 6f 6e  to be skipped on
114b0 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 74   subsequent.** t
114c0 69 6d 65 73 20 74 68 72 6f 75 67 68 20 74 68 65  imes through the
114d0 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c   loop..**.** All
114e0 20 22 6f 6e 63 65 22 20 66 6c 61 67 73 20 61 72   "once" flags ar
114f0 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65 61  e initially clea
11500 72 65 64 20 77 68 65 6e 65 76 65 72 20 61 20 70  red whenever a p
11510 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
11520 74 0a 2a 2a 20 66 69 72 73 74 20 62 65 67 69 6e  t.** first begin
11530 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73  s to run..*/.cas
11540 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20  e OP_Once: {    
11550 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
11560 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
11570 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c  p->p1<p->nOnceFl
11580 61 67 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  ag );.  VdbeBran
11590 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65  chTaken(p->aOnce
115a0 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  Flag[pOp->p1]!=0
115b0 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  , 2);.  if( p->a
115c0 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31  OnceFlag[pOp->p1
115d0 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  ] ){.    pc = pO
115e0 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65  p->p2-1;.  }else
115f0 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c  {.    p->aOnceFl
11600 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b  ag[pOp->p1] = 1;
11610 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
11620 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50  ./* Opcode: If P
11630 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
11640 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
11650 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
11660 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65  ister P1 is true
11670 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
11680 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  is considered tr
11690 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65  ue if it is nume
116a0 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f  ric and non-zero
116b0 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
116c0 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
116d0 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
116e0 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ump if and only 
116f0 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72  if P3 is non-zer
11700 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  o..*/./* Opcode:
11710 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20   IfNot P1 P2 P3 
11720 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
11730 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
11740 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
11750 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20   is False.  The 
11760 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
11770 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20  idered false if 
11780 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63  it has a numeric
11790 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20   value of zero. 
117a0 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
117b0 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
117c0 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
117d0 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  p if and only if
117e0 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e   P3 is non-zero.
117f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20  .*/.case OP_If: 
11800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11810 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
11820 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b  case OP_IfNot: {
11830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
11840 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e  ump, in1 */.  in
11850 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  t c;.  pIn1 = &a
11860 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
11870 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
11880 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
11890 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    c = pOp->p3;. 
118a0 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53   }else{.#ifdef S
118b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
118c0 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20  ING_POINT.    c 
118d0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
118e0 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a  Value(pIn1)!=0;.
118f0 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71  #else.    c = sq
11900 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
11910 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23  ue(pIn1)!=0.0;.#
11920 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f  endif.    if( pO
11930 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66  p->opcode==OP_If
11940 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20  Not ) c = !c;.  
11950 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
11960 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20  ken(c!=0, 2);.  
11970 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20  if( c ){.    pc 
11980 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
11990 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
119a0 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50  Opcode: IsNull P
119b0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
119c0 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50 31  nopsis:  if r[P1
119d0 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a  ]==NULL goto P2.
119e0 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
119f0 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
11a00 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
11a10 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
11a20 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  _IsNull: {      
11a30 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11a40 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70   TK_ISNULL, jump
11a50 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
11a60 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
11a70 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
11a80 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ken( (pIn1->flag
11a90 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
11aa0 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  , 2);.  if( (pIn
11ab0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
11ac0 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 70  ull)!=0 ){.    p
11ad0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
11ae0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
11af0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e  ./* Opcode: NotN
11b00 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
11b10 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
11b20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f  r[P1]!=NULL goto
11b30 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74   P2.**.** Jump t
11b40 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
11b50 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
11b60 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a   is not NULL.  .
11b70 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75  */.case OP_NotNu
11b80 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
11b90 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
11ba0 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  OTNULL, jump, in
11bb0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
11bc0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
11bd0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
11be0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
11bf0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29  MEM_Null)==0, 2)
11c00 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
11c10 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
11c20 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ==0 ){.    pc = 
11c30 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
11c40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
11c50 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50  Opcode: Column P
11c60 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
11c70 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
11c80 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  ]=PX.**.** Inter
11c90 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68  pret the data th
11ca0 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
11cb0 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75  nts to as a stru
11cc0 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e  cture built usin
11cd0 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63  g.** the MakeRec
11ce0 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ord instruction.
11cf0 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52    (See the MakeR
11d00 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72  ecord opcode for
11d10 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69   additional.** i
11d20 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
11d30 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74   the format of t
11d40 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61  he data.)  Extra
11d50 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  ct the P2-th col
11d60 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73  umn.** from this
11d70 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65   record.  If the
11d80 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74  re are less that
11d90 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75   (P2+1) .** valu
11da0 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
11db0 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  , extract a NULL
11dc0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  ..**.** The valu
11dd0 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73  e extracted is s
11de0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
11df0 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P3..**.** If t
11e00 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  he column contai
11e10 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32  ns fewer than P2
11e20 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78   fields, then ex
11e30 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f  tract a NULL.  O
11e40 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20  r,.** if the P4 
11e50 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34  argument is a P4
11e60 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c  _MEM use the val
11e70 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67  ue of the P4 arg
11e80 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20  ument as.** the 
11e90 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  result..**.** If
11ea0 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41   the OPFLAG_CLEA
11eb0 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65  RCACHE bit is se
11ec0 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69  t on P5 and P1 i
11ed0 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  s a pseudo-table
11ee0 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e   cursor,.** then
11ef0 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68   the cache of th
11f00 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65  e cursor is rese
11f10 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61  t prior to extra
11f20 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e  cting the column
11f30 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f  ..** The first O
11f40 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74  P_Column against
11f50 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
11f60 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20  after the value 
11f70 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  of the content.*
11f80 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63  * register has c
11f90 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61  hanged should ha
11fa0 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e  ve this bit set.
11fb0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
11fc0 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61  FLAG_LENGTHARG a
11fd0 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  nd OPFLAG_TYPEOF
11fe0 41 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74  ARG bits are set
11ff0 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74   on P5 when.** t
12000 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61  he result is gua
12010 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20  ranteed to only 
12020 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
12030 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e  rgument of a len
12040 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65  gth().** or type
12050 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72  of() function, r
12060 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68  espectively.  Th
12070 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72  e loading of lar
12080 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a  ge blobs can be.
12090 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c  ** skipped for l
120a0 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20  ength() and all 
120b0 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20  content loading 
120c0 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66  can be skipped f
120d0 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a  or typeof()..*/.
120e0 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20  case OP_Column: 
120f0 7b 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53  {.  i64 payloadS
12100 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72  ize64; /* Number
12110 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
12120 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
12130 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   p2;            
12140 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* column number
12150 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a   to retrieve */.
12160 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
12170 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45  ;    /* The VDBE
12180 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43   cursor */.  BtC
12190 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20  ursor *pCrsr;   
121a0 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72  /* The BTree cur
121b0 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54  sor */.  u32 *aT
121c0 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 61  ype;        /* a
121d0 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68  Type[i] holds th
121e0 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 6f  e numeric type o
121f0 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d  f the i-th colum
12200 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  n */.  u32 *aOff
12210 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
12220 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
12230 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
12240 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
12250 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  mn */.  int len;
12260 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
12270 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
12280 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20  serialized data 
12290 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a  for the column *
122a0 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
122b0 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
122c0 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  ounter */.  Mem 
122d0 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
122e0 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
122f0 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
12300 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
12310 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
12320 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
12330 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
12340 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
12350 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20  u8 *zData;   /* 
12360 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f  Part of the reco
12370 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
12380 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
12390 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74  zHdr;    /* Next
123a0 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f   unparsed byte o
123b0 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  f the header */.
123c0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64    const u8 *zEnd
123d0 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20  Hdr; /* Pointer 
123e0 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
123f0 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
12400 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20  /.  u32 offset; 
12410 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
12420 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a   into the data *
12430 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64 3b  /.  u32 szField;
12440 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12450 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
12460 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69   content of a fi
12470 65 6c 64 20 2a 2f 0a 20 20 75 33 32 20 61 76 61  eld */.  u32 ava
12480 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  il;         /* N
12490 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
124a0 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61  f available data
124b0 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20   */.  u32 t;    
124c0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79           /* A ty
124d0 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  pe code from the
124e0 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a   record header *
124f0 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20  /.  Mem *pReg;  
12500 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f         /* Pseudo
12510 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69  Table input regi
12520 73 74 65 72 20 2a 2f 0a 0a 20 20 70 32 20 3d 20  ster */..  p2 = 
12530 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
12540 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
12550 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
12560 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
12570 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
12580 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
12590 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
125a0 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72   pDest);.  asser
125b0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
125c0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
125d0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
125e0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
125f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
12600 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32   );.  assert( p2
12610 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20  <pC->nField );. 
12620 20 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54 79   aType = pC->aTy
12630 70 65 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20  pe;.  aOffset = 
12640 61 54 79 70 65 20 2b 20 70 43 2d 3e 6e 46 69 65  aType + pC->nFie
12650 6c 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ld;.#ifndef SQLI
12660 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
12670 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20 70  ABLE.  assert( p
12680 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d 3d  C->pVtabCursor==
12690 30 20 29 3b 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0 ); /* OP_Colum
126a0 6e 20 6e 65 76 65 72 20 63 61 6c 6c 65 64 20 6f  n never called o
126b0 6e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  n virtual table 
126c0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 70 43 72 73  */.#endif.  pCrs
126d0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
126e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
126f0 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64  !=0 || pC->pseud
12700 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 20 2f  oTableReg>0 ); /
12710 2a 20 70 43 72 73 72 20 4e 55 4c 4c 20 6f 6e 20  * pCrsr NULL on 
12720 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a  PseudoTables */.
12730 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
12740 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f  =0 || pC->nullRo
12750 77 20 29 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  w );          /*
12760 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 6f 6e 20   pC->nullRow on 
12770 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a  PseudoTables */.
12780 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
12790 73 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61  sor cache is sta
127a0 6c 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70 2d  le, bring it up-
127b0 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63 20  to-date */.  rc 
127c0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
127d0 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
127e0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
127f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
12800 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63  r;.  if( pC->cac
12810 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63  heStatus!=p->cac
12820 68 65 43 74 72 20 7c 7c 20 28 70 4f 70 2d 3e 70  heCtr || (pOp->p
12830 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  5&OPFLAG_CLEARCA
12840 43 48 45 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  CHE)!=0 ){.    i
12850 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
12860 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 72 73  {.      if( pCrs
12870 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  r==0 ){.        
12880 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
12890 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a  doTableReg>0 );.
128a0 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26          pReg = &
128b0 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54  aMem[pC->pseudoT
128c0 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20 20  ableReg];.      
128d0 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e    assert( pReg->
128e0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
128f0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
12900 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
12910 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20 20  Reg) );.        
12920 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
12930 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76  = pC->szRow = av
12940 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20  ail = pReg->n;. 
12950 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
12960 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a  = (u8*)pReg->z;.
12970 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
12980 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
12990 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e  lag(pDest, MEM_N
129a0 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  ull);.        go
129b0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
129c0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
129d0 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
129e0 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20  t( pCrsr );.    
129f0 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
12a00 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  e==0 ){.        
12a10 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
12a20 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
12a30 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
12a40 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
12a50 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b  =) sqlite3BtreeK
12a60 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70  eySize(pCrsr, &p
12a70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20  ayloadSize64);. 
12a80 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72         assert( r
12a90 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
12aa0 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20  /* True because 
12ab0 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
12ac0 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a  ) call above */.
12ad0 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74          /* sqlit
12ae0 65 33 42 74 72 65 65 50 61 72 73 65 43 65 6c 6c  e3BtreeParseCell
12af0 50 74 72 28 29 20 75 73 65 73 20 67 65 74 56 61  Ptr() uses getVa
12b00 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78 74 72  rint32() to extr
12b10 61 63 74 20 74 68 65 0a 20 20 20 20 20 20 20 20  act the.        
12b20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c  ** payload size,
12b30 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f 73 73   so it is imposs
12b40 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61 64  ible for payload
12b50 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20 20 20  Size64 to be.   
12b60 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74       ** larger t
12b70 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a  han 32 bits. */.
12b80 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
12b90 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26  (payloadSize64 &
12ba0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29   SQLITE_MAX_U32)
12bb0 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69  ==(u64)payloadSi
12bc0 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20 20 20  ze64 );.        
12bd0 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74  pC->aRow = sqlit
12be0 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68 28  e3BtreeKeyFetch(
12bf0 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a  pCrsr, &avail);.
12c00 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c          pC->payl
12c10 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70  oadSize = (u32)p
12c20 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20  ayloadSize64;.  
12c30 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12c40 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
12c50 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
12c60 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
12c70 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28         VVA_ONLY(
12c80 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
12c90 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
12ca0 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  , &pC->payloadSi
12cb0 7a 65 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ze);.        ass
12cc0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
12cd0 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74 61 53  OK );   /* DataS
12ce0 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69  ize() cannot fai
12cf0 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 43 2d  l */.        pC-
12d00 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42  >aRow = sqlite3B
12d10 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70 43  treeDataFetch(pC
12d20 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20  rsr, &avail);.  
12d30 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
12d40 72 74 28 20 61 76 61 69 6c 3c 3d 36 35 35 33 36  rt( avail<=65536
12d50 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20   );  /* Maximum 
12d60 70 61 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b  page size is 64K
12d70 69 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  iB */.      if( 
12d80 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
12d90 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b  <= (u32)avail ){
12da0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52  .        pC->szR
12db0 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64  ow = pC->payload
12dc0 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Size;.      }els
12dd0 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73  e{.        pC->s
12de0 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20 20  zRow = avail;.  
12df0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
12e00 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
12e10 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  > (u32)db->aLimi
12e20 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
12e30 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
12e40 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
12e50 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
12e60 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
12e70 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b  s = p->cacheCtr;
12e80 0a 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66  .    pC->iHdrOff
12e90 73 65 74 20 3d 20 67 65 74 56 61 72 69 6e 74 33  set = getVarint3
12ea0 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66 66 73  2(pC->aRow, offs
12eb0 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64  et);.    pC->nHd
12ec0 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 20 20 20  rParsed = 0;.   
12ed0 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20 6f 66   aOffset[0] = of
12ee0 66 73 65 74 3b 0a 20 20 20 20 69 66 28 20 61 76  fset;.    if( av
12ef0 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20 20  ail<offset ){.  
12f00 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20      /* pC->aRow 
12f10 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f  does not have to
12f20 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65   hold the entire
12f30 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f 65   row, but it doe
12f40 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20  s at least.     
12f50 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76 65   ** need to cove
12f60 72 20 74 68 65 20 68 65 61 64 65 72 20 6f 66 20  r the header of 
12f70 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66 20  the record.  If 
12f80 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f  pC->aRow does no
12f90 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20  t contain.      
12fa0 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  ** the complete 
12fb0 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65 74  header, then set
12fc0 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72   it to zero, for
12fd0 63 69 6e 67 20 74 68 65 20 68 65 61 64 65 72 20  cing the header 
12fe0 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64  to be.      ** d
12ff0 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
13000 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ated. */.      p
13010 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20  C->aRow = 0;.   
13020 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30     pC->szRow = 0
13030 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  ;.    }..    /* 
13040 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72  Make sure a corr
13050 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73  upt database has
13060 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e   not given us an
13070 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72   oversize header
13080 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73  ..    ** Do this
13090 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e   now to avoid an
130a0 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79   oversize memory
130b0 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20   allocation..   
130c0 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65 20   **.    ** Type 
130d0 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62  entries can be b
130e0 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62  etween 1 and 5 b
130f0 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20  ytes each.  But 
13100 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20  4 and 5 byte.   
13110 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f   ** types use so
13120 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65   much data space
13130 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20   that there can 
13140 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64  only be 4096 and
13150 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68   32 of.    ** th
13160 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  em, respectively
13170 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75  .  So the maximu
13180 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  m header length 
13190 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20  results from a. 
131a0 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70     ** 3-byte typ
131b0 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68  e for each of th
131c0 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37  e maximum of 327
131d0 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20  68 columns plus 
131e0 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78 74  three.    ** ext
131f0 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68 65  ra bytes for the
13200 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69   header length i
13210 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20  tself.  32768*3 
13220 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20  + 3 = 98307..   
13230 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66 73   */.    if( offs
13240 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f 66  et > 98307 || of
13250 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f  fset > pC->paylo
13260 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20 20  adSize ){.      
13270 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
13280 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
13290 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
132a0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
132b0 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
132c0 61 74 20 6c 65 61 73 74 20 74 68 65 20 66 69 72  at least the fir
132d0 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20  st p2+1 entries 
132e0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 68 61  of the header ha
132f0 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72  ve been.  ** par
13300 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e  sed and valid in
13310 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20  formation is in 
13320 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 61 54  aOffset[] and aT
13330 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66  ype[]..  */.  if
13340 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
13350 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49  <=p2 ){.    /* I
13360 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20  f there is more 
13370 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c 65  header available
13380 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e 20   for parsing in 
13390 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79 0a  the record, try.
133a0 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61 63      ** to extrac
133b0 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65  t additional fie
133c0 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20 74  lds up through t
133d0 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c 64  he p2+1-th field
133e0 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28   .    */.    if(
133f0 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c   pC->iHdrOffset<
13400 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20  aOffset[0] ){.  
13410 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
13420 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f   zData points to
13430 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72   enough of the r
13440 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74  ecord to cover t
13450 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20  he header. */.  
13460 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
13470 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d  ==0 ){.        m
13480 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20  emset(&sMem, 0, 
13490 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20  sizeof(sMem));. 
134a0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
134b0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
134c0 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 61 4f  ree(pCrsr, 0, aO
134d0 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20 20 20 20  ffset[0], .     
134e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13500 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26 73  !pC->isTable, &s
13510 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69 66  Mem);.        if
13520 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
13530 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
13540 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f  o op_column_erro
13550 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
13560 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38       zData = (u8
13570 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20  *)sMem.z;.      
13580 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a  }else{.        z
13590 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b  Data = pC->aRow;
135a0 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
135b0 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 61 54 79    /* Fill in aTy
135c0 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65  pe[i] and aOffse
135d0 74 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f  t[i] values thro
135e0 75 67 68 20 74 68 65 20 70 32 2d 74 68 20 66 69  ugh the p2-th fi
135f0 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 20 20 69 20  eld. */.      i 
13600 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  = pC->nHdrParsed
13610 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d  ;.      offset =
13620 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20   aOffset[i];.   
13630 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61 20     zHdr = zData 
13640 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  + pC->iHdrOffset
13650 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72 20  ;.      zEndHdr 
13660 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73 65  = zData + aOffse
13670 74 5b 30 5d 3b 0a 20 20 20 20 20 20 61 73 73 65  t[0];.      asse
13680 72 74 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64  rt( i<=p2 && zHd
13690 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20  r<zEndHdr );.   
136a0 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69     do{.        i
136b0 66 28 20 7a 48 64 72 5b 30 5d 3c 30 78 38 30 20  f( zHdr[0]<0x80 
136c0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74 20 3d  ){.          t =
136d0 20 7a 48 64 72 5b 30 5d 3b 0a 20 20 20 20 20 20   zHdr[0];.      
136e0 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20      zHdr++;.    
136f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
13700 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c       zHdr += sql
13710 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
13720 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20 20  zHdr, &t);.     
13730 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 54 79     }.        aTy
13740 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20 20  pe[i] = t;.     
13750 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c     szField = sql
13760 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
13770 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20  peLen(t);.      
13780 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46 69    offset += szFi
13790 65 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66 28  eld;.        if(
137a0 20 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64 20   offset<szField 
137b0 29 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f  ){  /* True if o
137c0 66 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73 20  ffset overflows 
137d0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  */.          zHd
137e0 72 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b  r = &zEndHdr[1];
137f0 20 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c 49    /* Forces SQLI
13800 54 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75 72  TE_CORRUPT retur
13810 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20  n below */.     
13820 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
13830 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 2b      }.        i+
13840 2b 3b 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73  +;.        aOffs
13850 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b 0a  et[i] = offset;.
13860 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c        }while( i<
13870 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64  =p2 && zHdr<zEnd
13880 48 64 72 20 29 3b 0a 20 20 20 20 20 20 70 43 2d  Hdr );.      pC-
13890 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69 3b  >nHdrParsed = i;
138a0 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72 4f  .      pC->iHdrO
138b0 66 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a 48  ffset = (u32)(zH
138c0 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20  dr - zData);.   
138d0 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d     if( pC->aRow=
138e0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
138f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
13900 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ase(&sMem);.    
13910 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d      sMem.flags =
13920 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20   MEM_Null;.     
13930 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 49   }.  .      /* I
13940 66 20 77 65 20 68 61 76 65 20 72 65 61 64 20 6d  f we have read m
13950 6f 72 65 20 68 65 61 64 65 72 20 64 61 74 61 20  ore header data 
13960 74 68 61 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e  than was contain
13970 65 64 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  ed in the header
13980 2c 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 69 66  ,.      ** or if
13990 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
139a0 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70 65 61  last field appea
139b0 72 73 20 74 6f 20 62 65 20 70 61 73 74 20 74 68  rs to be past th
139c0 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 20 20 20  e end of the.   
139d0 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72     ** record, or
139e0 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
139f0 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
13a00 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66 6f  pears to be befo
13a10 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20 20  re the end.     
13a20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
13a30 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c  d (when all fiel
13a40 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65  ds present), the
13a50 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64 65 61  n we must be dea
13a60 6c 69 6e 67 20 0a 20 20 20 20 20 20 2a 2a 20 77  ling .      ** w
13a70 69 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61  ith a corrupt da
13a80 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f  tabase..      */
13a90 0a 20 20 20 20 20 20 69 66 28 20 28 7a 48 64 72  .      if( (zHdr
13aa0 20 3e 20 7a 45 6e 64 48 64 72 29 0a 20 20 20 20   > zEndHdr).    
13ab0 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 20 3e 20     || (offset > 
13ac0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
13ad0 0a 20 20 20 20 20 20 20 7c 7c 20 28 7a 48 64 72  .       || (zHdr
13ae0 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66  ==zEndHdr && off
13af0 73 65 74 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64  set!=pC->payload
13b00 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20  Size).      ){. 
13b10 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
13b20 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
13b30 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
13b40 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20  _column_error;. 
13b50 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
13b60 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72    /* If after tr
13b70 79 69 6e 67 20 74 6f 20 65 78 74 72 61 20 6e 65  ying to extra ne
13b80 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  w entries from t
13b90 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50  he header, nHdrP
13ba0 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20  arsed is.    ** 
13bb0 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20  still not up to 
13bc0 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  p2, that means t
13bd0 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20 68  hat the record h
13be0 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70 32  as fewer than p2
13bf0 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e  .    ** columns.
13c00 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20    So the result 
13c10 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74  will be either t
13c20 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
13c30 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20   or a NULL..    
13c40 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  */.    if( pC->n
13c50 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b  HdrParsed<=p2 ){
13c60 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
13c70 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29  p4type==P4_MEM )
13c80 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
13c90 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
13ca0 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e  opy(pDest, pOp->
13cb0 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61  p4.pMem, MEM_Sta
13cc0 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  tic);.      }els
13cd0 65 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65  e{.        MemSe
13ce0 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
13cf0 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
13d00 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f    }.      goto o
13d10 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
13d20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78    }.  }..  /* Ex
13d30 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e  tract the conten
13d40 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74  t for the p2+1-t
13d50 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72  h column.  Contr
13d60 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a  ol can only.  **
13d70 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
13d80 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  t if aOffset[p2]
13d90 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c  , aOffset[p2+1],
13da0 20 61 6e 64 20 61 54 79 70 65 5b 70 32 5d 20 61   and aType[p2] a
13db0 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69  re.  ** all vali
13dc0 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  d..  */.  assert
13dd0 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72  ( p2<pC->nHdrPar
13de0 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sed );.  assert(
13df0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
13e00 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
13e10 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
13e20 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29  nvariants(pDest)
13e30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a   );.  if( pC->sz
13e40 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b  Row>=aOffset[p2+
13e50 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  1] ){.    /* Thi
13e60 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  s is the common 
13e70 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20 64  case where the d
13e80 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66  esired content f
13e90 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69  its on the origi
13ea0 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20  nal.    ** page 
13eb0 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74  - where the cont
13ec0 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e  ent is not on an
13ed0 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a   overflow page *
13ee0 2f 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c  /.    VdbeMemRel
13ef0 65 61 73 65 28 70 44 65 73 74 29 3b 0a 20 20 20  ease(pDest);.   
13f00 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
13f10 61 6c 47 65 74 28 70 43 2d 3e 61 52 6f 77 2b 61  alGet(pC->aRow+a
13f20 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 54 79 70  Offset[p2], aTyp
13f30 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20  e[p2], pDest);. 
13f40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54   }else{.    /* T
13f50 68 69 73 20 62 72 61 6e 63 68 20 68 61 70 70 65  his branch happe
13f60 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e  ns only when con
13f70 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66  tent is on overf
13f80 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20  low pages */.   
13f90 20 74 20 3d 20 61 54 79 70 65 5b 70 32 5d 3b 0a   t = aType[p2];.
13fa0 20 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70      if( ((pOp->p
13fb0 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47  5 & (OPFLAG_LENG
13fc0 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50  THARG|OPFLAG_TYP
13fd0 45 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20  EOFARG))!=0.    
13fe0 20 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32        && ((t>=12
13ff0 20 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c   && (t&1)==0) ||
14000 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
14010 41 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30  AG_TYPEOFARG)!=0
14020 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20  )).     || (len 
14030 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
14040 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d  ialTypeLen(t))==
14050 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f  0.    ){.      /
14060 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72  * Content is irr
14070 65 6c 65 76 61 6e 74 20 66 6f 72 20 74 68 65 20  elevant for the 
14080 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
14090 6e 20 61 6e 64 20 66 6f 72 0a 20 20 20 20 20 20  n and for.      
140a0 2a 2a 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29  ** the length(X)
140b0 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20 69   function if X i
140c0 73 20 61 20 62 6c 6f 62 2e 20 20 53 6f 20 77 65  s a blob.  So we
140d0 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75   might as well u
140e0 73 65 0a 20 20 20 20 20 20 2a 2a 20 62 6f 67 75  se.      ** bogu
140f0 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72  s content rather
14100 20 74 68 61 6e 20 72 65 61 64 69 6e 67 20 63 6f   than reading co
14110 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e  ntent from disk.
14120 20 20 4e 55 4c 4c 20 77 6f 72 6b 73 0a 20 20 20    NULL works.   
14130 20 20 20 2a 2a 20 66 6f 72 20 74 65 78 74 20 61     ** for text a
14140 6e 64 20 62 6c 6f 62 20 61 6e 64 20 77 68 61 74  nd blob and what
14150 65 76 65 72 20 69 73 20 69 6e 20 74 68 65 20 70  ever is in the p
14160 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61 72  ayloadSize64 var
14170 69 61 62 6c 65 0a 20 20 20 20 20 20 2a 2a 20 77  iable.      ** w
14180 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76 65  ill work for eve
14190 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 20 43  rything else.  C
141a0 6f 6e 74 65 6e 74 20 69 73 20 61 6c 73 6f 20 69  ontent is also i
141b0 72 72 65 6c 65 76 61 6e 74 20 69 66 0a 20 20 20  rrelevant if.   
141c0 20 20 20 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e     ** the conten
141d0 74 20 6c 65 6e 67 74 68 20 69 73 20 30 2e 20 2a  t length is 0. *
141e0 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  /.      zData = 
141f0 74 3c 3d 31 33 20 3f 20 28 75 38 2a 29 26 70 61  t<=13 ? (u8*)&pa
14200 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a 20 30 3b  yloadSize64 : 0;
14210 0a 20 20 20 20 20 20 73 4d 65 6d 2e 7a 4d 61 6c  .      sMem.zMal
14220 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  loc = 0;.    }el
14230 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 73 65 74  se{.      memset
14240 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f  (&sMem, 0, sizeo
14250 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20  f(sMem));.      
14260 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
14270 76 65 28 26 73 4d 65 6d 2c 20 70 44 65 73 74 29  ve(&sMem, pDest)
14280 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
14290 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
142a0 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66  tree(pCrsr, aOff
142b0 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 21 70  set[p2], len, !p
142c0 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20 20 20  C->isTable,.    
142d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26                 &
142f0 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28  sMem);.      if(
14300 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
14310 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  {.        goto o
14320 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a  p_column_error;.
14330 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44        }.      zD
14340 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e  ata = (u8*)sMem.
14350 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  z;.    }.    sql
14360 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
14370 74 28 7a 44 61 74 61 2c 20 74 2c 20 70 44 65 73  t(zData, t, pDes
14380 74 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 77 65  t);.    /* If we
14390 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
143a0 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f 20  ocated space to 
143b0 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28 69  hold the data (i
143c0 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20 73 71 6c  n the.    ** sql
143d0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
143e0 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76  tree() call abov
143f0 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72  e) then transfer
14400 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74   control of that
14410 0a 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61  .    ** dynamica
14420 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70  lly allocated sp
14430 61 63 65 20 6f 76 65 72 20 74 6f 20 74 68 65 20  ace over to the 
14440 70 44 65 73 74 20 73 74 72 75 63 74 75 72 65 2e  pDest structure.
14450 0a 20 20 20 20 2a 2a 20 54 68 69 73 20 70 72 65  .    ** This pre
14460 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20 63  vents a memory c
14470 6f 70 79 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  opy. */.    if( 
14480 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a  sMem.zMalloc ){.
14490 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 4d        assert( sM
144a0 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c  em.z==sMem.zMall
144b0 6f 63 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  oc );.      asse
144c0 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  rt( VdbeMemDynam
144d0 69 63 28 70 44 65 73 74 29 3d 3d 30 20 29 3b 0a  ic(pDest)==0 );.
144e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
144f0 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d  Dest->flags & (M
14500 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29  EM_Blob|MEM_Str)
14510 29 3d 3d 30 20 7c 7c 20 70 44 65 73 74 2d 3e 7a  )==0 || pDest->z
14520 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20  ==sMem.z );.    
14530 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26    pDest->flags &
14540 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45  = ~(MEM_Ephem|ME
14550 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20  M_Static);.     
14560 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d   pDest->flags |=
14570 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 20   MEM_Term;.     
14580 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d   pDest->z = sMem
14590 2e 7a 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d  .z;.      pDest-
145a0 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e  >zMalloc = sMem.
145b0 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 7d 0a 20  zMalloc;.    }. 
145c0 20 7d 0a 20 20 70 44 65 73 74 2d 3e 65 6e 63 20   }.  pDest->enc 
145d0 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 0a 6f 70 5f  = encoding;..op_
145e0 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 44 65  column_out:.  De
145f0 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 44 65  ephemeralize(pDe
14600 73 74 29 3b 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  st);.op_column_e
14610 72 72 6f 72 3a 0a 20 20 55 50 44 41 54 45 5f 4d  rror:.  UPDATE_M
14620 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
14630 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
14640 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
14650 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  est);.  break;.}
14660 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66  ../* Opcode: Aff
14670 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34  inity P1 P2 * P4
14680 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
14690 61 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50 32  affinity(r[P1@P2
146a0 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61  ]).**.** Apply a
146b0 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72  ffinities to a r
146c0 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73  ange of P2 regis
146d0 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69  ters starting wi
146e0 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  th P1..**.** P4 
146f0 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  is a string that
14700 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
14710 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20  s long. The nth 
14720 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
14730 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
14740 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
14750 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
14760 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
14770 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f   the nth.** memo
14780 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72  ry cell in the r
14790 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ange..*/.case OP
147a0 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63  _Affinity: {.  c
147b0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69  onst char *zAffi
147c0 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61  nity;   /* The a
147d0 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70  ffinity to be ap
147e0 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  plied */.  char 
147f0 63 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  cAff;           
14800 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20      /* A single 
14810 63 68 61 72 61 63 74 65 72 20 6f 66 20 61 66 66  character of aff
14820 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66  inity */..  zAff
14830 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
14840 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  z;.  assert( zAf
14850 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61  finity!=0 );.  a
14860 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
14870 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a  [pOp->p2]==0 );.
14880 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
14890 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65  Op->p1];.  while
148a0 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66  ( (cAff = *(zAff
148b0 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a  inity++))!=0 ){.
148c0 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
148d0 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d   <= &p->aMem[(p-
148e0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
148f0 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  )] );.    assert
14900 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
14910 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 41  1) );.    applyA
14920 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41  ffinity(pIn1, cA
14930 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ff, encoding);. 
14940 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
14950 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
14960 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64  code: MakeRecord
14970 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
14980 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
14990 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50 32 5d  ]=mkrec(r[P1@P2]
149a0 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  ).**.** Convert 
149b0 50 32 20 72 65 67 69 73 74 65 72 73 20 62 65 67  P2 registers beg
149c0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69  inning with P1 i
149d0 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72 64 20  nto the [record 
149e0 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20 61  format].** use a
149f0 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64 20  s a data record 
14a00 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 61  in a database ta
14a10 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a  ble or as a key.
14a20 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20  ** in an index. 
14a30 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   The OP_Column o
14a40 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65  pcode can decode
14a50 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65   the record late
14a60 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20  r..**.** P4 may 
14a70 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  be a string that
14a80 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
14a90 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68  s long.  The nth
14aa0 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
14ab0 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
14ac0 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
14ad0 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
14ae0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
14af0 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65  r the nth.** fie
14b00 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ld of the index 
14b10 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  key..**.** The m
14b20 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72  apping from char
14b30 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74  acter to affinit
14b40 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68  y is given by th
14b50 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a  e SQLITE_AFF_.**
14b60 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
14b70 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a  in sqliteInt.h..
14b80 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e  **.** If P4 is N
14b90 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64  ULL then all ind
14ba0 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74  ex fields have t
14bb0 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45  he affinity NONE
14bc0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b  ..*/.case OP_Mak
14bd0 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20  eRecord: {.  u8 
14be0 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20  *zNewRecord;    
14bf0 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20      /* A buffer 
14c00 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
14c10 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
14c20 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ord */.  Mem *pR
14c30 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
14c40 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  /* The new recor
14c50 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61  d */.  u64 nData
14c60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
14c70 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
14c80 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
14c90 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20  /.  int nHdr;   
14ca0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
14cb0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
14cc0 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f   header space */
14cd0 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20  .  i64 nByte;   
14ce0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
14cf0 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  a space required
14d00 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64   for this record
14d10 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b   */.  int nZero;
14d20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14d30 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
14d40 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
14d50 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
14d60 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20  .  int nVarint; 
14d70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14d80 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
14d90 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33  a varint */.  u3
14da0 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20  2 serial_type;  
14db0 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65       /* Type fie
14dc0 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61  ld */.  Mem *pDa
14dd0 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ta0;           /
14de0 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f  * First field to
14df0 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74   be combined int
14e00 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  o the record */.
14e10 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20    Mem *pLast;   
14e20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
14e30 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65   field of the re
14e40 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  cord */.  int nF
14e50 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  ield;           
14e60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
14e70 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
14e80 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  rd */.  char *zA
14e90 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f  ffinity;       /
14ea0 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73  * The affinity s
14eb0 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65  tring for the re
14ec0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69  cord */.  int fi
14ed0 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
14ee0 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20   /* File format 
14ef0 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64  to use for encod
14f00 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  ing */.  int i; 
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e  /* Space used in
14f30 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 68 65   zNewRecord[] he
14f40 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b  ader */.  int j;
14f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f60 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69   /* Space used i
14f70 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 63  n zNewRecord[] c
14f80 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  ontent */.  int 
14f90 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
14fa0 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
14fb0 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a  a field */..  /*
14fc0 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65   Assuming the re
14fd0 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20  cord contains N 
14fe0 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f  fields, the reco
14ff0 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a  rd format looks.
15000 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a    ** like this:.
15010 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d    **.  ** ------
15020 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15030 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15040 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15050 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15060 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69  --.  ** | hdr-si
15070 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79  ze | type 0 | ty
15080 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70  pe 1 | ... | typ
15090 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20  e N-1 | data0 | 
150a0 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c  ... | data N-1 |
150b0 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d   .  ** ---------
150c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
150d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
150e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
150f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
15100 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30    **.  ** Data(0
15110 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ) is taken from 
15120 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44 61  register P1.  Da
15130 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d  ta(1) comes from
15140 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20   register P1+1. 
15150 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68   ** and so froth
15160 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68  ..  **.  ** Each
15170 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20 61   type field is a
15180 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e   varint represen
15190 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20  ting the serial 
151a0 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a  type of the .  *
151b0 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
151c0 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65  data element (se
151d0 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  e sqlite3VdbeSer
151e0 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a  ialType()). The.
151f0 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69    ** hdr-size fi
15200 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61  eld is also a va
15210 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
15220 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  e offset from th
15230 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a  e beginning.  **
15240 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74   of the record t
15250 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20  o data0..  */.  
15260 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20  nData = 0;      
15270 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15280 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
15290 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20  ace */.  nHdr = 
152a0 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  0;          /* N
152b0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
152c0 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a  f header space *
152d0 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20  /.  nZero = 0;  
152e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
152f0 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
15300 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
15310 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69   record */.  nFi
15320 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  eld = pOp->p1;. 
15330 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
15340 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
15350 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f  ( nField>0 && pO
15360 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
15370 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e  p2+nField<=(p->n
15380 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
15390 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20  1 );.  pData0 = 
153a0 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20  &aMem[nField];. 
153b0 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
153c0 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44  2;.  pLast = &pD
153d0 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a  ata0[nField-1];.
153e0 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20    file_format = 
153f0 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
15400 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65  ormat;..  /* Ide
15410 6e 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74  ntify the output
15420 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61   register */.  a
15430 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
15440 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p1 || pOp->p
15450 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  3>=pOp->p1+pOp->
15460 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  p2 );.  pOut = &
15470 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
15480 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
15490 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f  e(p, pOut);..  /
154a0 2a 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75  * Apply the requ
154b0 65 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74  ested affinity t
154c0 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a  o all inputs.  *
154d0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74  /.  assert( pDat
154e0 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69  a0<=pLast );.  i
154f0 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a  f( zAffinity ){.
15500 20 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61      pRec = pData
15510 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  0;.    do{.     
15520 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
15530 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69  Rec++, *(zAffini
15540 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29  ty++), encoding)
15550 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
15560 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20  zAffinity[0]==0 
15570 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29  || pRec<=pLast )
15580 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41  ;.    }while( zA
15590 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20  ffinity[0] );.  
155a0 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72  }..  /* Loop thr
155b0 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74  ough the element
155c0 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65  s that will make
155d0 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74   up the record t
155e0 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75  o figure.  ** ou
155f0 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65  t how much space
15600 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
15610 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
15620 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70  .  */.  pRec = p
15630 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20  Last;.  do{.    
15640 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
15650 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20  id(pRec) );.    
15660 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71  serial_type = sq
15670 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
15680 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66  ype(pRec, file_f
15690 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e 20  ormat);.    len 
156a0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
156b0 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69 61  ialTypeLen(seria
156c0 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28  l_type);.    if(
156d0 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
156e0 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
156f0 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20   if( nData ){.  
15700 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
15710 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70  eMemExpandBlob(p
15720 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Rec);.      }els
15730 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72 6f  e{.        nZero
15740 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   += pRec->u.nZer
15750 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 2d  o;.        len -
15760 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
15770 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
15780 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b     nData += len;
15790 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73  .    testcase( s
157a0 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20  erial_type==127 
157b0 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  );.    testcase(
157c0 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
157d0 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d  8 );.    nHdr +=
157e0 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32   serial_type<=12
157f0 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33 56  7 ? 1 : sqlite3V
15800 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f  arintLen(serial_
15810 74 79 70 65 29 3b 0a 20 20 7d 77 68 69 6c 65 28  type);.  }while(
15820 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44 61 74 61   (--pRec)>=pData
15830 30 20 29 3b 0a 0a 20 20 2f 2a 20 41 64 64 20 74  0 );..  /* Add t
15840 68 65 20 69 6e 69 74 69 61 6c 20 68 65 61 64 65  he initial heade
15850 72 20 76 61 72 69 6e 74 20 61 6e 64 20 74 6f 74  r varint and tot
15860 61 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20  al the size */. 
15870 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d   testcase( nHdr=
15880 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63 61  =126 );.  testca
15890 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b  se( nHdr==127 );
158a0 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32 36  .  if( nHdr<=126
158b0 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 63   ){.    /* The c
158c0 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20  ommon case */.  
158d0 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d    nHdr += 1;.  }
158e0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72  else{.    /* Rar
158f0 65 20 63 61 73 65 20 6f 66 20 61 20 72 65 61 6c  e case of a real
15900 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65 72 20  ly large header 
15910 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20 3d  */.    nVarint =
15920 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
15930 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48 64  n(nHdr);.    nHd
15940 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20  r += nVarint;.  
15950 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71    if( nVarint<sq
15960 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
15970 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20  Hdr) ) nHdr++;. 
15980 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64   }.  nByte = nHd
15990 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28 20 6e  r+nData;.  if( n
159a0 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Byte>db->aLimit[
159b0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
159c0 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
159d0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20   too_big;.  }.. 
159e0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
159f0 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
15a00 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c  r has a buffer l
15a10 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73  arge enough to s
15a20 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e  tore .  ** the n
15a30 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f  ew record. The o
15a40 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28  utput register (
15a50 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20  pOp->p3) is not 
15a60 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20  allowed to.  ** 
15a70 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  be one of the in
15a80 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62  put registers (b
15a90 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f  ecause the follo
15aa0 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a  wing call to.  *
15ab0 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  * sqlite3VdbeMem
15ac0 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f  Grow() could clo
15ad0 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20 62  bber the value b
15ae0 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65 64  efore it is used
15af0 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71  )..  */.  if( sq
15b00 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
15b10 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74  (pOut, (int)nByt
15b20 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74  e, 0) ){.    got
15b30 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
15b40 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38  zNewRecord = (u8
15b50 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f   *)pOut->z;..  /
15b60 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f  * Write the reco
15b70 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56  rd */.  i = putV
15b80 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f  arint32(zNewReco
15b90 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d  rd, nHdr);.  j =
15ba0 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28   nHdr;.  assert(
15bb0 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29   pData0<=pLast )
15bc0 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74 61  ;.  pRec = pData
15bd0 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72  0;.  do{.    ser
15be0 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
15bf0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
15c00 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
15c10 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75  at);.    i += pu
15c20 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52  tVarint32(&zNewR
15c30 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c  ecord[i], serial
15c40 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20 20 20  _type);         
15c50 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70     /* serial typ
15c60 65 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71  e */.    j += sq
15c70 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50  lite3VdbeSerialP
15c80 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a  ut(&zNewRecord[j
15c90 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c 5f  ], pRec, serial_
15ca0 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e  type); /* conten
15cb0 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28  t */.  }while( (
15cc0 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20 29  ++pRec)<=pLast )
15cd0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e  ;.  assert( i==n
15ce0 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Hdr );.  assert(
15cf0 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20   j==nByte );..  
15d00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
15d10 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
15d20 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
15d30 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  r) );.  pOut->n 
15d40 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
15d50 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
15d60 4d 5f 42 6c 6f 62 3b 0a 20 20 70 4f 75 74 2d 3e  M_Blob;.  pOut->
15d70 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20  xDel = 0;.  if( 
15d80 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75  nZero ){.    pOu
15d90 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65  t->u.nZero = nZe
15da0 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ro;.    pOut->fl
15db0 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b  ags |= MEM_Zero;
15dc0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  .  }.  pOut->enc
15dd0 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20   = SQLITE_UTF8; 
15de0 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20   /* In case the 
15df0 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e  blob is ever con
15e00 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a  verted to text *
15e10 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  /.  REGISTER_TRA
15e20 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74  CE(pOp->p3, pOut
15e30 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
15e40 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
15e50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
15e60 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20  pcode: Count P1 
15e70 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
15e80 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e  psis: r[P2]=coun
15e90 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  t().**.** Store 
15ea0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e  the number of en
15eb0 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65  tries (an intege
15ec0 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20  r value) in the 
15ed0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a  table or index .
15ee0 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ** opened by cur
15ef0 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74  sor P1 in regist
15f00 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66  er P2.*/.#ifndef
15f10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52   SQLITE_OMIT_BTR
15f20 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f  EECOUNT.case OP_
15f30 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  Count: {        
15f40 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
15f50 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e  ase */.  i64 nEn
15f60 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  try;.  BtCursor 
15f70 2a 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72  *pCrsr;..  pCrsr
15f80 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
15f90 3e 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  >p1]->pCursor;. 
15fa0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
15fb0 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20  ;.  nEntry = 0; 
15fc0 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
15fd0 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69   Only used to si
15fe0 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
15ff0 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
16000 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72  e3BtreeCount(pCr
16010 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20  sr, &nEntry);.  
16020 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74  pOut->u.i = nEnt
16030 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  ry;.  break;.}.#
16040 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
16050 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a  : Savepoint P1 *
16060 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70   * P4 *.**.** Op
16070 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72  en, release or r
16080 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65  ollback the save
16090 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70  point named by p
160a0 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70  arameter P4, dep
160b0 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65  ending.** on the
160c0 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f   value of P1. To
160d0 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65   open a new save
160e0 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f  point, P1==0. To
160f0 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
16100 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67  ) an.** existing
16110 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d   savepoint, P1==
16120 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63  1, or to rollbac
16130 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61  k an existing sa
16140 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a  vepoint P1==2..*
16150 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f  /.case OP_Savepo
16160 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b  int: {.  int p1;
16170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16180 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
16190 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20  e of P1 operand 
161a0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  */.  char *zName
161b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
161c0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
161d0 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69  savepoint */.  i
161e0 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65  nt nName;.  Save
161f0 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53  point *pNew;.  S
16200 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70  avepoint *pSavep
16210 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e  oint;.  Savepoin
16220 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69  t *pTmp;.  int i
16230 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74  Savepoint;.  int
16240 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70   ii;..  p1 = pOp
16250 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20  ->p1;.  zName = 
16260 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a  pOp->p4.z;..  /*
16270 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
16280 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73   p1 parameter is
16290 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61   valid. Also tha
162a0 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  t if there is no
162b0 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73   open.  ** trans
162c0 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  action, then the
162d0 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79  re cannot be any
162e0 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20   savepoints. .  
162f0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  */.  assert( db-
16300 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c  >pSavepoint==0 |
16310 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  | db->autoCommit
16320 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
16330 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
16340 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EGIN||p1==SAVEPO
16350 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d  INT_RELEASE||p1=
16360 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
16370 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ACK );.  assert(
16380 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
16390 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  || db->isTransac
163a0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30  tionSavepoint==0
163b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68   );.  assert( ch
163c0 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
163d0 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72  t(db) );.  asser
163e0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
163f0 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41  );..  if( p1==SA
16400 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b  VEPOINT_BEGIN ){
16410 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64  .    if( db->nVd
16420 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20  beWrite>0 ){.   
16430 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65     /* A new save
16440 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20  point cannot be 
16450 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65  created if there
16460 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
16470 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74  e .      ** stat
16480 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65  ements (i.e. ope
16490 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63  n read/write inc
164a0 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61  remental blob ha
164b0 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f  ndles)..      */
164c0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
164d0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
164e0 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
164f0 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20   open savepoint 
16500 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
16510 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
16520 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
16530 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
16540 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
16550 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69      nName = sqli
16560 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d  te3Strlen30(zNam
16570 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  e);..#ifndef SQL
16580 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
16590 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54  TABLE.      /* T
165a0 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65  his call is Ok e
165b0 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65  ven if this save
165c0 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c  point is actuall
165d0 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  y a transaction.
165e0 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
165f0 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72  nt (and therefor
16600 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f  e should not pro
16610 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29  mpt xSavepoint()
16620 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20  ) callbacks..   
16630 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73     ** If this is
16640 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73   a transaction s
16650 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
16660 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61  pened, it is gua
16670 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a  ranteed.      **
16680 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56   that the db->aV
16690 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73  Trans[] array is
166a0 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20   empty.  */.    
166b0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75    assert( db->au
166c0 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64  toCommit==0 || d
166d0 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b  b->nVTrans==0 );
166e0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
166f0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
16700 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42  (db, SAVEPOINT_B
16710 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20  EGIN,.          
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16730 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
16740 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f  ment+db->nSavepo
16750 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  int);.      if( 
16760 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
16770 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
16780 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a  o_error;.#endif.
16790 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65  .      /* Create
167a0 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   a new savepoint
167b0 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20   structure. */. 
167c0 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69       pNew = sqli
167d0 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
167e0 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f  b, sizeof(Savepo
167f0 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20  int)+nName+1);. 
16800 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b       if( pNew ){
16810 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a  .        pNew->z
16820 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26  Name = (char *)&
16830 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20  pNew[1];.       
16840 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e   memcpy(pNew->zN
16850 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d  ame, zName, nNam
16860 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20  e+1);.    .     
16870 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
16880 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61  s no open transa
16890 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b  ction, then mark
168a0 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63 69   this as a speci
168b0 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74  al.        ** "t
168c0 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
168d0 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20  oint". */.      
168e0 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f    if( db->autoCo
168f0 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20  mmit ){.        
16900 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
16910 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
16920 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
16930 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a  nSavepoint = 1;.
16940 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
16950 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61           db->nSa
16960 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20  vepoint++;.     
16970 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20 20     }.    .      
16980 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65    /* Link the ne
16990 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f  w savepoint into
169a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
169b0 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a  ndle's list. */.
169c0 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e          pNew->pN
169d0 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  ext = db->pSavep
169e0 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
169f0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
16a00 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  New;.        pNe
16a10 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  w->nDeferredCons
16a20 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
16a30 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e  Cons;.        pN
16a40 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  ew->nDeferredImm
16a50 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
16a60 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
16a70 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
16a80 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69  se{.    iSavepoi
16a90 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20  nt = 0;..    /* 
16aa0 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73  Find the named s
16ab0 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65  avepoint. If the
16ac0 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61  re is no such sa
16ad0 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e  vepoint, then an
16ae0 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  .    ** an error
16af0 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
16b00 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20  the user.  */.  
16b10 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61    for(.      pSa
16b20 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53  vepoint = db->pS
16b30 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20  avepoint; .     
16b40 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73   pSavepoint && s
16b50 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53  qlite3StrICmp(pS
16b60 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c  avepoint->zName,
16b70 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70   zName);.      p
16b80 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
16b90 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20  epoint->pNext.  
16ba0 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65    ){.      iSave
16bb0 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20  point++;.    }. 
16bc0 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69     if( !pSavepoi
16bd0 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
16be0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
16bf0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e  >zErrMsg, db, "n
16c00 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
16c10 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  : %s", zName);. 
16c20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
16c30 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73  _ERROR;.    }els
16c40 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57  e if( db->nVdbeW
16c50 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41  rite>0 && p1==SA
16c60 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
16c70 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69  ){.      /* It i
16c80 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
16c90 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
16ca0 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69  t) a savepoint i
16cb0 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20  f there are .   
16cc0 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69     ** active wri
16cd0 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  te statements.. 
16ce0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
16cf0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
16d00 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
16d10 0a 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74  .        "cannot
16d20 20 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69   release savepoi
16d30 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65  nt - SQL stateme
16d40 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
16d50 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
16d60 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
16d70 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20  ;.    }else{..  
16d80 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65      /* Determine
16d90 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
16da0 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
16db0 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e  ction savepoint.
16dc0 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a   If so,.      **
16dd0 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52   and this is a R
16de0 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20  ELEASE command, 
16df0 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  then the current
16e00 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20   transaction .  
16e10 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74      ** is commit
16e20 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20  ted. .      */. 
16e30 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73       int isTrans
16e40 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f  action = pSavepo
16e50 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26  int->pNext==0 &&
16e60 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
16e70 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  onSavepoint;.   
16e80 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63     if( isTransac
16e90 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45  tion && p1==SAVE
16ea0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
16eb0 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63  .        if( (rc
16ec0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
16ed0 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51  eckFk(p, 1))!=SQ
16ee0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
16ef0 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
16f00 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
16f10 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
16f20 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
16f30 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
16f40 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c  VdbeHalt(p)==SQL
16f50 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
16f60 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
16f70 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
16f80 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
16f90 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20            p->rc 
16fa0 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
16fb0 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  SY;.          go
16fc0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
16fd0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16fe0 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
16ff0 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30  ionSavepoint = 0
17000 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70  ;.        rc = p
17010 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ->rc;.      }els
17020 65 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65  e{.        iSave
17030 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76  point = db->nSav
17040 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f  epoint - iSavepo
17050 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  int - 1;.       
17060 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
17070 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20  NT_ROLLBACK ){. 
17080 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d           for(ii=
17090 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
170a0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
170b0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 54 72    sqlite3BtreeTr
170c0 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d  ipAllCursors(db-
170d0 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 53 51  >aDb[ii].pBt, SQ
170e0 4c 49 54 45 5f 41 42 4f 52 54 29 3b 0a 20 20 20  LITE_ABORT);.   
170f0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
17100 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69   }.        for(i
17110 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
17120 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
17130 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
17140 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d  reeSavepoint(db-
17150 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31  >aDb[ii].pBt, p1
17160 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , iSavepoint);. 
17170 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
17180 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
17190 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
171a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
171b0 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  r;.          }. 
171c0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
171d0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
171e0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28  NT_ROLLBACK && (
171f0 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
17200 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21  _InternChanges)!
17210 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
17220 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
17230 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
17240 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  db);.          s
17250 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
17260 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
17270 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  n(db);.         
17280 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62   db->flags = (db
17290 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45  ->flags | SQLITE
172a0 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b  _InternChanges);
172b0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
172c0 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52   }.  .      /* R
172d0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
172e0 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52  ther this is a R
172f0 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41  ELEASE or ROLLBA
17300 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20  CK, destroy all 
17310 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
17320 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69  ints nested insi
17330 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f  de of the savepo
17340 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
17350 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20  ed on. */.      
17360 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65  while( db->pSave
17370 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e  point!=pSavepoin
17380 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d  t ){.        pTm
17390 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  p = db->pSavepoi
173a0 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
173b0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d  pSavepoint = pTm
173c0 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  p->pNext;.      
173d0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
173e0 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20  db, pTmp);.     
173f0 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
17400 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  t--;.      }..  
17410 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20      /* If it is 
17420 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20  a RELEASE, then 
17430 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65  destroy the save
17440 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
17450 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a  ated on .      *
17460 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20  * too. If it is 
17470 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74  a ROLLBACK TO, t
17480 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62  hen set the numb
17490 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a  er of deferred .
174a0 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61        ** constra
174b0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70  int violations p
174c0 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
174d0 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61  tabase to the va
174e0 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20  lue stored.     
174f0 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76   ** when the sav
17500 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74  epoint was creat
17510 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66  ed.  */.      if
17520 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
17530 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
17540 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65     assert( pSave
17550 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65  point==db->pSave
17560 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  point );.       
17570 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
17580 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
17590 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
175a0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
175b0 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
175c0 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
175d0 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  action ){.      
175e0 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
175f0 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt--;.        }.
17600 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
17610 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
17620 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  edCons = pSavepo
17630 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  int->nDeferredCo
17640 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  ns;.        db->
17650 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
17660 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
17670 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
17680 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
17690 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
176a0 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  on ){.        rc
176b0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
176c0 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20  vepoint(db, p1, 
176d0 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
176e0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
176f0 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
17700 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
17710 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
17720 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a    }..  break;.}.
17730 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f  ./* Opcode: Auto
17740 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a  Commit P1 P2 * *
17750 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
17760 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63   database auto-c
17770 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31  ommit flag to P1
17780 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32   (1 or 0). If P2
17790 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a   is true, roll.*
177a0 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65  * back any curre
177b0 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72 65  ntly active btre
177c0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  e transactions. 
177d0 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  If there are any
177e0 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28   active.** VMs (
177f0 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20  apart from this 
17800 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c  one), then a ROL
17810 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20  LBACK fails.  A 
17820 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a  COMMIT fails if.
17830 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63 74  ** there are act
17840 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20  ive writing VMs 
17850 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74 68  or active VMs th
17860 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63 61  at use shared ca
17870 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  che..**.** This 
17880 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73  instruction caus
17890 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c  es the VM to hal
178a0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75  t..*/.case OP_Au
178b0 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e  toCommit: {.  in
178c0 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  t desiredAutoCom
178d0 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c  mit;.  int iRoll
178e0 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e  back;.  int turn
178f0 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64  OnAC;..  desired
17900 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70  AutoCommit = pOp
17910 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63  ->p1;.  iRollbac
17920 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74  k = pOp->p2;.  t
17930 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65  urnOnAC = desire
17940 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21  dAutoCommit && !
17950 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a  db->autoCommit;.
17960 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
17970 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
17980 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  | desiredAutoCom
17990 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  mit==0 );.  asse
179a0 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
179b0 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c  ommit==1 || iRol
179c0 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73  lback==0 );.  as
179d0 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41  sert( db->nVdbeA
179e0 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41  ctive>0 );  /* A
179f0 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65  t least this one
17a00 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f   VM is active */
17a10 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
17a20 73 52 65 61 64 65 72 20 29 3b 0a 0a 23 69 66 20  sReader );..#if 
17a30 30 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  0.  if( turnOnAC
17a40 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26   && iRollback &&
17a50 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65   db->nVdbeActive
17a60 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  >1 ){.    /* If 
17a70 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
17a80 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f   implements a RO
17a90 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72  LLBACK and other
17aa0 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20   VMs are.    ** 
17ab0 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61  still running, a
17ac0 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  nd a transaction
17ad0 20 69 73 20 61 63 74 69 76 65 2c 20 72 65 74 75   is active, retu
17ae0 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
17af0 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68  cating.    ** th
17b00 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
17b10 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
17b20 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20  irst. .    */.  
17b30 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
17b40 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
17b50 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  db, "cannot roll
17b60 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e  back transaction
17b70 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
17b80 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
17b90 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
17ba0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
17bb0 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
17bc0 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20  .  if( turnOnAC 
17bd0 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26  && !iRollback &&
17be0 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
17bf0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  0 ){.    /* If t
17c00 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
17c10 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d  implements a COM
17c20 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  MIT and other VM
17c30 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20  s are writing.  
17c40 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
17c50 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
17c60 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
17c70 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
17c80 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a   first. .    */.
17c90 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
17ca0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
17cb0 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f  , db, "cannot co
17cc0 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  mmit transaction
17cd0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
17ce0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
17cf0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
17d00 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
17d10 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65  ;.  }else if( de
17d20 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21  siredAutoCommit!
17d30 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  =db->autoCommit 
17d40 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c  ){.    if( iRoll
17d50 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73  back ){.      as
17d60 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
17d70 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20  oCommit==1 );.  
17d80 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62      sqlite3Rollb
17d90 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54  ackAll(db, SQLIT
17da0 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
17db0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  );.      db->aut
17dc0 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
17dd0 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d   }else if( (rc =
17de0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
17df0 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
17e00 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
17e10 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
17e20 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
17e30 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
17e40 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75   = (u8)desiredAu
17e50 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20  toCommit;.      
17e60 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
17e70 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
17e80 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70  USY ){.        p
17e90 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
17ea0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
17eb0 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72  t = (u8)(1-desir
17ec0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20  edAutoCommit);. 
17ed0 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
17ee0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
17ef0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64  .        goto vd
17f00 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
17f10 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
17f20 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
17f30 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
17f40 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
17f50 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
17f60 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
17f70 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
17f80 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
17f90 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
17fa0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
17fb0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
17fc0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
17fd0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
17fe0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
17ff0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20  zErrMsg, db,.   
18000 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
18010 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
18020 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
18030 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
18040 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
18050 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b        (iRollback
18060 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
18070 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
18080 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180a0 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
180b0 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
180c0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
180d0 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
180e0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
180f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
18100 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  ../* Opcode: Tra
18110 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50  nsaction P1 P2 P
18120 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65  3 P4 P5.**.** Be
18130 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  gin a transactio
18140 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31  n on database P1
18150 20 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   if a transactio
18160 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79  n is not already
18170 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49  .** active..** I
18180 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P2 is non-zero
18190 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74  , then a write-t
181a0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
181b0 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a  arted, or if a .
181c0 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74  ** read-transact
181d0 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61  ion is already a
181e0 63 74 69 76 65 2c 20 69 74 20 69 73 20 75 70 67  ctive, it is upg
181f0 72 61 64 65 64 20 74 6f 20 61 20 77 72 69 74 65  raded to a write
18200 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a  -transaction..**
18210 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20   If P2 is zero, 
18220 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e  then a read-tran
18230 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
18240 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ed..**.** P1 is 
18250 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
18260 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f   database file o
18270 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e  n which the tran
18280 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74  saction is.** st
18290 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20  arted.  Index 0 
182a0 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
182b0 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e  base file and in
182c0 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20  dex 1 is the.** 
182d0 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  file used for te
182e0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
182f0 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72   Indices of 2 or
18300 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66   more are used f
18310 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64  or.** attached d
18320 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
18330 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  If a write-trans
18340 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
18350 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75  d and the Vdbe.u
18360 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66  sesStmtJournal f
18370 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28  lag is.** true (
18380 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74  this flag is set
18390 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79   if the Vdbe may
183a0 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61   modify more tha
183b0 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61  n one row and ma
183c0 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42  y.** throw an AB
183d0 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20  ORT exception), 
183e0 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
183f0 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f  saction may also
18400 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d   be opened..** M
18410 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79  ore specifically
18420 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  , a statement tr
18430 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65  ansaction is ope
18440 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61  ned iff the data
18450 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
18460 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  on is currently 
18470 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69  not in autocommi
18480 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68  t mode, or if th
18490 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a  ere are other.**
184a0 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
184b0 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20  ts. A statement 
184c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f  transaction allo
184d0 77 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d  ws the changes m
184e0 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56  ade by this.** V
184f0 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  DBE to be rolled
18500 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65   back after an e
18510 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76  rror without hav
18520 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b  ing to roll back
18530 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74   the.** entire t
18540 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e  ransaction. If n
18550 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75  o error is encou
18560 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74  ntered, the stat
18570 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
18580 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61  n.** will automa
18590 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77  tically commit w
185a0 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c  hen the VDBE hal
185b0 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  ts..**.** If P5!
185c0 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  =0 then this opc
185d0 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20  ode also checks 
185e0 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
185f0 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20  e against P3.** 
18600 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67  and the schema g
18610 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
18620 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a  r against P4..**
18630 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e   The cookie chan
18640 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68  ges its value wh
18650 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
18660 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ase schema chang
18670 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  es..** This oper
18680 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ation is used to
18690 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61   detect when tha
186a0 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73  t the cookie has
186b0 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20   changed.** and 
186c0 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74  that the current
186d0 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74   process needs t
186e0 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68  o reread the sch
186f0 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63 68  ema.  If the sch
18700 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e  ema.** cookie in
18710 20 50 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d   P3 differs from
18720 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
18730 69 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ie in the databa
18740 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20  se header or.** 
18750 69 66 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  if the schema ge
18760 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
18770 20 69 6e 20 50 34 20 64 69 66 66 65 72 73 20 66   in P4 differs f
18780 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a  rom the current.
18790 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ** generation co
187a0 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53  unter, then an S
187b0 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72  QLITE_SCHEMA err
187c0 6f 72 20 69 73 20 72 61 69 73 65 64 20 61 6e 64  or is raised and
187d0 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61   execution.** ha
187e0 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65  lts.  The sqlite
187f0 33 5f 73 74 65 70 28 29 20 77 72 61 70 70 65 72  3_step() wrapper
18800 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20   function might 
18810 74 68 65 6e 20 72 65 70 72 65 70 61 72 65 20 74  then reprepare t
18820 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  he.** statement 
18830 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f  and rerun it fro
18840 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  m the beginning.
18850 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e  .*/.case OP_Tran
18860 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72  saction: {.  Btr
18870 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69  ee *pBt;.  int i
18880 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e  Meta;.  int iGen
18890 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
188a0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61  bIsReader );.  a
188b0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
188c0 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32  ly==0 || pOp->p2
188d0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
188e0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
188f0 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
18900 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
18910 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
18920 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b  ask, pOp->p1) );
18930 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26  .  if( pOp->p2 &
18940 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  & (db->flags & S
18950 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29  QLITE_QueryOnly)
18960 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  !=0 ){.    rc = 
18970 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b  SQLITE_READONLY;
18980 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
18990 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
189a0 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  }.  pBt = db->aD
189b0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
189c0 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20  .  if( pBt ){.  
189d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
189e0 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42  reeBeginTrans(pB
189f0 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20  t, pOp->p2);.   
18a00 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
18a10 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d  BUSY ){.      p-
18a20 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
18a30 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
18a40 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
18a50 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
18a60 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
18a70 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
18a80 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
18a90 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
18aa0 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70      }..    if( p
18ab0 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65  Op->p2 && p->use
18ac0 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20  sStmtJournal .  
18ad0 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43     && (db->autoC
18ae0 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
18af0 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20  nVdbeRead>1) .  
18b00 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72    ){.      asser
18b10 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
18b20 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b  sInTrans(pBt) );
18b30 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53  .      if( p->iS
18b40 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20  tatement==0 ){. 
18b50 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64         assert( d
18b60 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30  b->nStatement>=0
18b70 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69   && db->nSavepoi
18b80 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20  nt>=0 );.       
18b90 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
18ba0 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69  +; .        p->i
18bb0 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e  Statement = db->
18bc0 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
18bd0 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20  >nStatement;.   
18be0 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d     }..      rc =
18bf0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
18c00 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f  point(db, SAVEPO
18c10 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53  INT_BEGIN, p->iS
18c20 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20  tatement-1);.   
18c30 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
18c40 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
18c50 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
18c60 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20  eBeginStmt(pBt, 
18c70 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a  p->iStatement);.
18c80 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
18c90 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72  * Store the curr
18ca0 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ent value of the
18cb0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
18cc0 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
18cd0 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63  raint.      ** c
18ce0 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73  ounter. If the s
18cf0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
18d00 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65  tion needs to be
18d10 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20   rolled back,.  
18d20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65      ** the value
18d30 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72   of this counter
18d40 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73   needs to be res
18d50 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20  tored too.  */. 
18d60 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
18d70 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
18d80 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
18d90 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f  p->nStmtDefImmCo
18da0 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
18db0 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d  edImmCons;.    }
18dc0 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20  ..    /* Gather 
18dd0 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
18de0 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68  on number for ch
18df0 65 63 6b 69 6e 67 20 2a 2f 0a 20 20 20 20 73 71  ecking */.    sq
18e00 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
18e10 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48  a(pBt, BTREE_SCH
18e20 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33  EMA_VERSION, (u3
18e30 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 20  2 *)&iMeta);.   
18e40 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b   iGen = db->aDb[
18e50 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61  pOp->p1].pSchema
18e60 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20  ->iGeneration;. 
18e70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e   }else{.    iGen
18e80 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20   = iMeta = 0;.  
18e90 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  }.  assert( pOp-
18ea0 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
18eb0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
18ec0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  );.  if( pOp->p5
18ed0 20 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d   && (iMeta!=pOp-
18ee0 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70  >p3 || iGen!=pOp
18ef0 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20 20 73  ->p4.i) ){.    s
18f00 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
18f10 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
18f20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73    p->zErrMsg = s
18f30 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64  qlite3DbStrDup(d
18f40 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68  b, "database sch
18f50 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22  ema has changed"
18f60 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  );.    /* If the
18f70 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66   schema-cookie f
18f80 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
18f90 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68   file matches th
18fa0 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a  e cookie .    **
18fb0 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65   stored with the
18fc0 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65   in-memory repre
18fd0 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
18fe0 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20   schema, do.    
18ff0 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68  ** not reload th
19000 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68  e schema from th
19010 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
19020 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49  .    **.    ** I
19030 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73  f virtual-tables
19040 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69   are in use, thi
19050 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e  s is not just an
19060 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20   optimization.. 
19070 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74     ** Often, v-t
19080 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69  ables store thei
19090 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20  r data in other 
190a0 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77  SQLite tables, w
190b0 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20  hich.    ** are 
190c0 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74  queried from wit
190d0 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20  hin xNext() and 
190e0 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65  other v-table me
190f0 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20  thods using.    
19100 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65 72  ** prepared quer
19110 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 71  ies. If such a q
19120 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64  uery is out-of-d
19130 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77  ate, we do not w
19140 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69  ant to.    ** di
19150 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62 61  scard the databa
19160 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68  se schema, as th
19170 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c  e user code impl
19180 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20  ementing the.   
19190 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c   ** v-table woul
191a0 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65 61  d have to be rea
191b0 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  dy for the sqlit
191c0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
191d0 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20  e itself.    ** 
191e0 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65  to be invalidate
191f0 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74  d whenever sqlit
19200 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c  e3_step() is cal
19210 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  led from within 
19220 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c  .    ** a v-tabl
19230 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f  e method..    */
19240 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62  .    if( db->aDb
19250 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
19260 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
19270 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20  !=iMeta ){.     
19280 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
19290 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e  Schema(db, pOp->
192a0 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  p1);.    }.    p
192b0 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20  ->expired = 1;. 
192c0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53     rc = SQLITE_S
192d0 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65  CHEMA;.  }.  bre
192e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
192f0 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20  : ReadCookie P1 
19300 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
19310 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62  Read cookie numb
19320 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62  er P3 from datab
19330 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74 65  ase P1 and write
19340 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65   it into registe
19350 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69  r P2..** P3==1 i
19360 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  s the schema ver
19370 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20  sion.  P3==2 is 
19380 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
19390 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73  mat..** P3==3 is
193a0 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64   the recommended
193b0 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a   pager cache siz
193c0 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  e, and so forth.
193d0 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68    P1==0 is.** th
193e0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
193f0 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
19400 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
19410 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
19420 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74  e.** temporary t
19430 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ables..**.** The
19440 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61  re must be a rea
19450 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d-lock on the da
19460 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61  tabase (either a
19470 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
19480 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
19490 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65  or there must be
194a0 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29   an open cursor)
194b0 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75   before.** execu
194c0 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75  ting this instru
194d0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
194e0 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20  P_ReadCookie: { 
194f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19500 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
19510 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b   */.  int iMeta;
19520 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
19530 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73  t iCookie;..  as
19540 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
19550 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f  er );.  iDb = pO
19560 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65  p->p1;.  iCookie
19570 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
19580 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51  sert( pOp->p3<SQ
19590 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
195a0 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  A );.  assert( i
195b0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
195c0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
195d0 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ( db->aDb[iDb].p
195e0 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
195f0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
19600 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
19610 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74   );..  sqlite3Bt
19620 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61  reeGetMeta(db->a
19630 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f  Db[iDb].pBt, iCo
19640 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d  okie, (u32 *)&iM
19650 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  eta);.  pOut->u.
19660 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65  i = iMeta;.  bre
19670 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
19680 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50  : SetCookie P1 P
19690 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  2 P3 * *.**.** W
196a0 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  rite the content
196b0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
196c0 28 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20  (interpreted as 
196d0 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69  an integer).** i
196e0 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  nto cookie numbe
196f0 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65  r P2 of database
19700 20 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74   P1.  P2==1 is t
19710 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
19720 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73  n.  .** P2==2 is
19730 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
19740 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74  rmat. P2==3 is t
19750 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70  he recommended p
19760 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73  ager cache .** s
19770 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  ize, and so fort
19780 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65  h.  P1==0 is the
19790 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
197a0 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
197b0 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73   the .** databas
197c0 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73  e file used to s
197d0 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74  tore temporary t
197e0 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74  ables..**.** A t
197f0 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20  ransaction must 
19800 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72  be started befor
19810 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  e executing this
19820 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
19830 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b   OP_SetCookie: {
19840 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f         /* in3 */
19850 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73  .  Db *pDb;.  as
19860 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51  sert( pOp->p2<SQ
19870 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
19880 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  A );.  assert( p
19890 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
198a0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
198b0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
198c0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
198d0 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
198e0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
198f0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62  Only==0 );.  pDb
19900 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
19910 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
19920 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
19930 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
19940 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
19950 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20  db, pOp->p1, 0) 
19960 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
19970 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71  m[pOp->p3];.  sq
19980 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
19990 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20  gerify(pIn3);.  
199a0 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75  /* See note abou
199b0 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67  t index shifting
199c0 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69   on OP_ReadCooki
199d0 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  e */.  rc = sqli
199e0 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65  te3BtreeUpdateMe
199f0 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70  ta(pDb->pBt, pOp
19a00 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d  ->p2, (int)pIn3-
19a10 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70  >u.i);.  if( pOp
19a20 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45  ->p2==BTREE_SCHE
19a30 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20  MA_VERSION ){.  
19a40 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63    /* When the sc
19a50 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e  hema cookie chan
19a60 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20  ges, record the 
19a70 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72  new cookie inter
19a80 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62  nally */.    pDb
19a90 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ->pSchema->schem
19aa0 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29  a_cookie = (int)
19ab0 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64  pIn3->u.i;.    d
19ac0 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
19ad0 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
19ae0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
19af0 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c  p->p2==BTREE_FIL
19b00 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20  E_FORMAT ){.    
19b10 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65  /* Record change
19b20 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f  s in the file fo
19b30 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d  rmat */.    pDb-
19b40 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
19b50 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e 33  ormat = (u8)pIn3
19b60 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28  ->u.i;.  }.  if(
19b70 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20   pOp->p1==1 ){. 
19b80 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65     /* Invalidate
19b90 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74   all prepared st
19ba0 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65  atements wheneve
19bb0 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
19bc0 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d  ase.    ** schem
19bd0 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54  a is changed.  T
19be0 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20  icket #1644 */. 
19bf0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
19c00 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
19c10 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65  ts(db);.    p->e
19c20 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a  xpired = 0;.  }.
19c30 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19c40 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20  pcode: OpenRead 
19c50 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
19c60 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
19c70 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
19c80 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c   Open a read-onl
19c90 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65  y cursor for the
19ca0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
19cb0 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
19cc0 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61  is.** P2 in a da
19cd0 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
19ce0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
19cf0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
19d00 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d   P3. .** P3==0 m
19d10 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61  eans the main da
19d20 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65  tabase, P3==1 me
19d30 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ans the database
19d40 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65   used for .** te
19d50 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20  mporary tables, 
19d60 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75  and P3>1 means u
19d70 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f  sed the correspo
19d80 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a  nding attached.*
19d90 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76  * database.  Giv
19da0 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72  e the new cursor
19db0 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f   an identifier o
19dc0 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a  f P1.  The P1.**
19dd0 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74   values need not
19de0 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62   be contiguous b
19df0 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73  ut all P1 values
19e00 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c   should be small
19e10 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74   integers..** It
19e20 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
19e30 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69   P1 to be negati
19e40 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  ve..**.** If P5!
19e50 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20  =0 then use the 
19e60 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
19e70 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f  ter P2 as the ro
19e80 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20  ot page, not.** 
19e90 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20  the value of P2 
19ea0 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  itself..**.** Th
19eb0 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65  ere will be a re
19ec0 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad lock on the d
19ed0 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72  atabase whenever
19ee0 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20   there is an.** 
19ef0 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66  open cursor.  If
19f00 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61   the database wa
19f10 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72  s unlocked prior
19f20 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63   to this instruc
19f30 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72  tion.** then a r
19f40 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  ead lock is acqu
19f50 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ired as part of 
19f60 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
19f70 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63  .  A read.** loc
19f80 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70  k allows other p
19f90 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64  rocesses to read
19fa0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75   the database bu
19fb0 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61  t prohibits.** a
19fc0 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ny other process
19fd0 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20   from modifying 
19fe0 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
19ff0 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a  he read lock is.
1a000 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e  ** released when
1a010 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65   all cursors are
1a020 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69   closed.  If thi
1a030 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  s instruction at
1a040 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74  tempts.** to get
1a050 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74   a read lock but
1a060 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69   fails, the scri
1a070 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69  pt terminates wi
1a080 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f  th an.** SQLITE_
1a090 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e  BUSY error code.
1a0a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
1a0b0 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
1a0c0 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
1a0d0 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
1a0e0 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
1a0f0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
1a100 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
1a110 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
1a120 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
1a130 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e   structure, then
1a140 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20   said structure 
1a150 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
1a160 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
1a170 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
1a180 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e  f the index bein
1a190 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77  g opened. Otherw
1a1a0 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e  ise, if P4 is an
1a1b0 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c   integer .** val
1a1c0 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f  ue, it is set to
1a1d0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1a1e0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
1a1f0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ble..**.** See a
1a200 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20  lso: OpenWrite, 
1a210 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20  ReopenIdx.*/./* 
1a220 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64  Opcode: ReopenId
1a230 78 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  x P1 P2 P3 P4 P5
1a240 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
1a250 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a  ot=P2 iDb=P3.**.
1a260 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78  ** The ReopenIdx
1a270 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65 78   opcode works ex
1a280 61 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f  actly like ReadO
1a290 70 65 6e 20 65 78 63 65 70 74 20 74 68 61 74 20  pen except that 
1a2a0 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63  it first.** chec
1a2b0 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ks to see if the
1a2c0 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73   cursor on P1 is
1a2d0 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77 69   already open wi
1a2e0 74 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a  th a root page.*
1a2f0 2a 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20 61  * number of P2 a
1a300 6e 64 20 69 66 20 69 74 20 69 73 20 74 68 69 73  nd if it is this
1a310 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20   opcode becomes 
1a320 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68  a no-op.  In oth
1a330 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20  er words,.** if 
1a340 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  the cursor is al
1a350 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e  ready open, do n
1a360 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a  ot reopen it..**
1a370 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64  .** The ReopenId
1a380 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c  x opcode may onl
1a390 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20 50  y be used with P
1a3a0 35 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50 34  5==0 and with P4
1a3b0 20 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b   being.** a P4_K
1a3c0 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20  EYINFO object.  
1a3d0 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65  Furthermore, the
1a3e0 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62   P3 value must b
1a3f0 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a  e the same as.**
1a400 20 65 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f   every other Reo
1a410 70 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65  penIdx or OpenRe
1a420 61 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20  ad for the same 
1a430 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a  cursor number..*
1a440 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70 65  *.** See the Ope
1a450 6e 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f 63  nRead opcode doc
1a460 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61  umentation for a
1a470 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
1a480 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
1a490 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50  ode: OpenWrite P
1a4a0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1a4b0 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
1a4c0 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
1a4d0 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74  Open a read/writ
1a4e0 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50  e cursor named P
1a4f0 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  1 on the table o
1a500 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
1a510 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32  ot.** page is P2
1a520 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75  .  Or if P5!=0 u
1a530 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
1a540 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  f register P2 to
1a550 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f   find the.** roo
1a560 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  t page..**.** Th
1a570 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
1a580 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
1a590 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
1a5a0 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
1a5b0 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
1a5c0 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
1a5d0 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
1a5e0 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
1a5f0 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
1a600 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
1a610 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
1a620 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
1a630 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
1a640 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
1a650 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
1a660 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
1a670 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
1a680 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
1a690 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
1a6a0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1a6b0 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74   the table, or t
1a6c0 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74  o the.** largest
1a6d0 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f   index of any co
1a6e0 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c  lumn of the tabl
1a6f0 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c  e that is actual
1a700 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  ly used..**.** T
1a710 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1a720 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
1a730 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20  OpenRead except 
1a740 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68  that it opens th
1a750 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72  e cursor.** in r
1a760 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20  ead/write mode. 
1a770 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62   For a given tab
1a780 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65  le, there can be
1a790 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61   one or more rea
1a7a0 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72  d-only.** cursor
1a7b0 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65  s or a single re
1a7c0 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
1a7d0 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a  but not both..**
1a7e0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65  .** See also Ope
1a7f0 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nRead..*/.case O
1a800 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20  P_ReopenIdx: {. 
1a810 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
1a820 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
1a830 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73  p->p5==0 );.  as
1a840 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1a850 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b  e==P4_KEYINFO );
1a860 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
1a870 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  sr[pOp->p1];.  i
1a880 66 28 20 70 43 75 72 20 26 26 20 70 43 75 72 2d  f( pCur && pCur-
1a890 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 70 4f 70 2d 3e  >pgnoRoot==pOp->
1a8a0 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  p2 ){.    assert
1a8b0 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70  ( pCur->iDb==pOp
1a8c0 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20  ->p3 );      /* 
1a8d0 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74 68  Guaranteed by th
1a8e0 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1a8f0 20 2a 2f 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   */.    break;. 
1a900 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63   }.  /* If the c
1a910 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72  ursor is not cur
1a920 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69  rently open or i
1a930 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66  s open on a diff
1a940 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78  erent.  ** index
1a950 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
1a960 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e  ugh into OP_Open
1a970 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20  Read to force a 
1a980 72 65 6f 70 65 6e 20 2a 2f 0a 7d 0a 63 61 73 65  reopen */.}.case
1a990 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61   OP_OpenRead:.ca
1a9a0 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a  se OP_OpenWrite:
1a9b0 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b   {.  int nField;
1a9c0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1a9d0 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  Info;.  int p2;.
1a9e0 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
1a9f0 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65   wrFlag;.  Btree
1aa00 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73   *pX;.  VdbeCurs
1aa10 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a  or *pCur;.  Db *
1aa20 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pDb;..  assert( 
1aa30 28 70 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47  (pOp->p5&(OPFLAG
1aa40 5f 50 32 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f  _P2ISREG|OPFLAG_
1aa50 42 55 4c 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e  BULKCSR))==pOp->
1aa60 70 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p5 );.  assert( 
1aa70 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1aa80 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70  OpenWrite || pOp
1aa90 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73  ->p5==0 );.  ass
1aaa0 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
1aab0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1aac0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1aad0 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e  penRead || pOp->
1aae0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65  opcode==OP_Reope
1aaf0 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c  nIdx.          |
1ab00 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  | p->readOnly==0
1ab10 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78   );..  if( p->ex
1ab20 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20  pired ){.    rc 
1ab30 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a  = SQLITE_ABORT;.
1ab40 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
1ab50 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20    nField = 0;.  
1ab60 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
1ab70 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
1ab80 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
1ab90 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
1aba0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
1abb0 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
1abc0 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
1abd0 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70  ask, iDb) );.  p
1abe0 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
1abf0 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e  b];.  pX = pDb->
1ac00 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pBt;.  assert( p
1ac10 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  X!=0 );.  if( pO
1ac20 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1ac30 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77  enWrite ){.    w
1ac40 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61  rFlag = 1;.    a
1ac50 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
1ac60 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
1ac70 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
1ac80 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d   if( pDb->pSchem
1ac90 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c  a->file_format <
1aca0 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1acb0 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20  Format ){.      
1acc0 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1acd0 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63  ormat = pDb->pSc
1ace0 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
1acf0 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  t;.    }.  }else
1ad00 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30  {.    wrFlag = 0
1ad10 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1ad20 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49  >p5 & OPFLAG_P2I
1ad30 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65  SREG ){.    asse
1ad40 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20  rt( p2>0 );.    
1ad50 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e  assert( p2<=(p->
1ad60 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
1ad70 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26   );.    pIn2 = &
1ad80 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73  aMem[p2];.    as
1ad90 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1ada0 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73  (pIn2) );.    as
1adb0 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
1adc0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
1add0 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
1ade0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1adf0 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d  (pIn2);.    p2 =
1ae00 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b   (int)pIn2->u.i;
1ae10 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76  .    /* The p2 v
1ae20 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65  alue always come
1ae30 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f  s from a prior O
1ae40 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70  P_CreateTable op
1ae50 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20  code and.    ** 
1ae60 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c  that opcode will
1ae70 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20   always set the 
1ae80 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72  p2 value to 2 or
1ae90 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61   more or else fa
1aea0 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68  il..    ** If th
1aeb0 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75  ere were a failu
1aec0 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64  re, the prepared
1aed0 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
1aee0 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20   have halted.   
1aef0 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68   ** before reach
1af00 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
1af10 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28  tion. */.    if(
1af20 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b   NEVER(p2<2) ) {
1af30 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
1af40 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
1af50 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1af60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1af70 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
1af80 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1af90 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70  KEYINFO ){.    p
1afa0 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1afb0 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  4.pKeyInfo;.    
1afc0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1afd0 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1afe0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1aff0 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29  eyInfo->db==db )
1b000 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  ;.    nField = p
1b010 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b  KeyInfo->nField+
1b020 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c  pKeyInfo->nXFiel
1b030 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  d;.  }else if( p
1b040 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1b050 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65  NT32 ){.    nFie
1b060 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
1b070 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
1b080 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1b090 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20  sert( nField>=0 
1b0a0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  );.  testcase( n
1b0b0 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20  Field==0 );  /* 
1b0c0 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47  Table with INTEG
1b0d0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  ER PRIMARY KEY a
1b0e0 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20  nd nothing else 
1b0f0 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  */.  pCur = allo
1b100 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1b110 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69  p->p1, nField, i
1b120 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43  Db, 1);.  if( pC
1b130 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ur==0 ) goto no_
1b140 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  mem;.  pCur->nul
1b150 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72  lRow = 1;.  pCur
1b160 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b  ->isOrdered = 1;
1b170 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f  .  pCur->pgnoRoo
1b180 74 20 3d 20 70 32 3b 0a 20 20 72 63 20 3d 20 73  t = p2;.  rc = s
1b190 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1b1a0 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67  r(pX, p2, wrFlag
1b1b0 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72  , pKeyInfo, pCur
1b1c0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  ->pCursor);.  pC
1b1d0 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  ur->pKeyInfo = p
1b1e0 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
1b1f0 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  t( OPFLAG_BULKCS
1b200 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  R==BTREE_BULKLOA
1b210 44 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74  D );.  sqlite3Bt
1b220 72 65 65 43 75 72 73 6f 72 48 69 6e 74 73 28 70  reeCursorHints(p
1b230 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c 20 28 70  Cur->pCursor, (p
1b240 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1b250 42 55 4c 4b 43 53 52 29 29 3b 0a 0a 20 20 2f 2a  BULKCSR));..  /*
1b260 20 53 69 6e 63 65 20 69 74 20 70 65 72 66 6f 72   Since it perfor
1b270 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c  ms no memory all
1b280 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f 2c 20 74  ocation or IO, t
1b290 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65 20 74 68  he only value th
1b2a0 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  at.  ** sqlite3B
1b2b0 74 72 65 65 43 75 72 73 6f 72 28 29 20 6d 61 79  treeCursor() may
1b2c0 20 72 65 74 75 72 6e 20 69 73 20 53 51 4c 49 54   return is SQLIT
1b2d0 45 5f 4f 4b 2e 20 2a 2f 0a 20 20 61 73 73 65 72  E_OK. */.  asser
1b2e0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
1b2f0 20 29 3b 0a 0a 20 20 2f 2a 20 53 65 74 20 74 68   );..  /* Set th
1b300 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54  e VdbeCursor.isT
1b310 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50  able variable. P
1b320 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73  revious versions
1b330 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20   of.  ** SQLite 
1b340 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66  used to check if
1b350 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66   the root-page f
1b360 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61  lags were sane a
1b370 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a  t this point.  *
1b380 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74  * and report dat
1b390 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e  abase corruption
1b3a0 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f   if they were no
1b3b0 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63  t, but this chec
1b3c0 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65  k has.  ** since
1b3d0 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
1b3e0 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f  btree layer.  */
1b3f0 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62    .  pCur->isTab
1b400 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65  le = pOp->p4type
1b410 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20  !=P4_KEYINFO;.  
1b420 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1b430 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72  ode: OpenEphemer
1b440 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  al P1 P2 * P4 P5
1b450 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43  .** Synopsis: nC
1b460 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f  olumn=P2.**.** O
1b470 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
1b480 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65   P1 to a transie
1b490 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  nt table..** The
1b4a0 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79   cursor is alway
1b4b0 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72  s opened read/wr
1b4c0 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20  ite even if .** 
1b4d0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1b4e0 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20  e is read-only. 
1b4f0 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a   The ephemeral.*
1b500 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74  * table is delet
1b510 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
1b520 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   when the cursor
1b530 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a   is closed..**.*
1b540 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
1b550 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1b560 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74   the ephemeral t
1b570 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
1b580 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  sor points to a 
1b590 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50  BTree table if P
1b5a0 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54  4==0 and to a BT
1b5b0 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20  ree index.** if 
1b5c0 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66  P4 is not 0.  If
1b5d0 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
1b5e0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   it points to a 
1b5f0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1b600 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65  e.** that define
1b610 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  s the format of 
1b620 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65  keys in the inde
1b630 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  x..**.** The P5 
1b640 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65  parameter can be
1b650 20 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42   a mask of the B
1b660 54 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66  TREE_* flags def
1b670 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65  ined.** in btree
1b680 2e 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73  .h.  These flags
1b690 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73   control aspects
1b6a0 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f   of the operatio
1b6b0 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65  n of.** the btre
1b6c0 65 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d  e.  The BTREE_OM
1b6d0 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42  IT_JOURNAL and B
1b6e0 54 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67  TREE_SINGLE flag
1b6f0 73 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61  s are.** added a
1b700 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f  utomatically..*/
1b710 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1b720 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20  Autoindex P1 P2 
1b730 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
1b740 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a  is: nColumn=P2.*
1b750 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1b760 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20   works the same 
1b770 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  as OP_OpenEpheme
1b780 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a  ral.  It has a.*
1b790 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65  * different name
1b7a0 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20   to distinguish 
1b7b0 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73  its use.  Tables
1b7c0 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a   created using.*
1b7d0 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  * by this opcode
1b7e0 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f   will be used fo
1b7f0 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  r automatically 
1b800 63 72 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e  created transien
1b810 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20  t.** indices in 
1b820 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  joins..*/.case O
1b830 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a  P_OpenAutoindex:
1b840 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70   .case OP_OpenEp
1b850 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62  hemeral: {.  Vdb
1b860 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20  eCursor *pCx;.  
1b870 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1b880 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  o;..  static con
1b890 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20  st int vfsFlags 
1b8a0 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  = .      SQLITE_
1b8b0 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c  OPEN_READWRITE |
1b8c0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1b8d0 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20  EN_CREATE |.    
1b8e0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58    SQLITE_OPEN_EX
1b8f0 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20  CLUSIVE |.      
1b900 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45  SQLITE_OPEN_DELE
1b910 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20  TEONCLOSE |.    
1b920 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52    SQLITE_OPEN_TR
1b930 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73  ANSIENT_DB;.  as
1b940 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1b950 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1b960 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p2>=0 );.  pC
1b970 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1b980 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1b990 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a  Op->p2, -1, 1);.
1b9a0 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1b9b0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1b9c0 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1b9d0 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72    pCx->isEphemer
1b9e0 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73  al = 1;.  rc = s
1b9f0 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28  qlite3BtreeOpen(
1ba00 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c  db->pVfs, 0, db,
1ba10 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20   &pCx->pBt, .   
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba30 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f       BTREE_OMIT_
1ba40 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f  JOURNAL | BTREE_
1ba50 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35  SINGLE | pOp->p5
1ba60 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69  , vfsFlags);.  i
1ba70 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1ba80 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
1ba90 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
1baa0 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29  ans(pCx->pBt, 1)
1bab0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d  ;.  }.  if( rc==
1bac0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1bad0 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65   /* If a transie
1bae0 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75  nt index is requ
1baf0 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20  ired, create it 
1bb00 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a  by calling.    *
1bb10 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  * sqlite3BtreeCr
1bb20 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68  eateTable() with
1bb30 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b   the BTREE_BLOBK
1bb40 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20  EY flag before. 
1bb50 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74     ** opening it
1bb60 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  . If a transient
1bb70 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72   table is requir
1bb80 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65  ed, just use the
1bb90 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69  .    ** automati
1bba0 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61  cally created ta
1bbb0 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61  ble with root-pa
1bbc0 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e  ge 1 (an BLOB_IN
1bbd0 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20  TKEY table)..   
1bbe0 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65   */.    if( (pKe
1bbf0 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1bc00 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a  pKeyInfo)!=0 ){.
1bc10 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a        int pgno;.
1bc20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1bc30 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1bc40 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72  YINFO );.      r
1bc50 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1bc60 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d  CreateTable(pCx-
1bc70 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52  >pBt, &pgno, BTR
1bc80 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70  EE_BLOBKEY | pOp
1bc90 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66  ->p5); .      if
1bca0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1bcb0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1bcc0 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f  t( pgno==MASTER_
1bcd0 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20  ROOT+1 );.      
1bce0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1bcf0 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1bd00 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b        assert( pK
1bd10 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1bd20 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20  (db) );.        
1bd30 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1bd40 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
1bd50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1bd60 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1bd70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 70 4b 65  Bt, pgno, 1, pKe
1bd80 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70 43 75 72  yInfo, pCx->pCur
1bd90 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  sor);.      }.  
1bda0 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1bdb0 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1bdc0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1bdd0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1bde0 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f  Cx->pBt, MASTER_
1bdf0 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d  ROOT, 1, 0, pCx-
1be00 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1be10 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1be20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  1;.    }.  }.  p
1be30 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  Cx->isOrdered = 
1be40 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f  (pOp->p5!=BTREE_
1be50 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72  UNORDERED);.  br
1be60 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1be70 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31  e: SorterOpen P1
1be80 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
1be90 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
1bea0 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45  ks like OP_OpenE
1beb0 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20  phemeral except 
1bec0 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a  that it opens.**
1bed0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1bee0 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69  ex that is speci
1bef0 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64  fically designed
1bf00 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a   to sort large.*
1bf10 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61  * tables using a
1bf20 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65  n external merge
1bf30 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e  -sort algorithm.
1bf40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
1bf50 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  erOpen: {.  Vdbe
1bf60 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
1bf70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1bf80 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1bf90 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20  pOp->p2>=0 );.  
1bfa0 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1bfb0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1bfc0 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29   pOp->p2, -1, 1)
1bfd0 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1bfe0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1bff0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1c000 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1c010 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d  ;.  assert( pCx-
1c020 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64  >pKeyInfo->db==d
1c030 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  b );.  assert( p
1c040 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  Cx->pKeyInfo->en
1c050 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1c060 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
1c070 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70  SorterInit(db, p
1c080 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Cx);.  break;.}.
1c090 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1c0a0 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
1c0b0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1c0c0 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72   P3 columns in r
1c0d0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  [P2].**.** Open 
1c0e0 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
1c0f0 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
1c100 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
1c110 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
1c120 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
1c130 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
1c140 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20  that one row is 
1c150 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d  the content of m
1c160 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65  emory.** registe
1c170 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20  r P2.  In other 
1c180 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31  words, cursor P1
1c190 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61   becomes an alia
1c1a0 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45  s for the .** ME
1c1b0 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63  M_Blob content c
1c1c0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69  ontained in regi
1c1d0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41  ster P2..**.** A
1c1e0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72   pseudo-table cr
1c1f0 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70  eated by this op
1c200 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
1c210 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  hold a single.**
1c220 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
1c230 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
1c240 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
1c250 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
1c260 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
1c270 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
1c280 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1c290 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  ode.  The OP_Col
1c2a0 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  umn opcode.** is
1c2b0 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72   the only cursor
1c2c0 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72   opcode that wor
1c2d0 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f  ks with a pseudo
1c2e0 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33  -table..**.** P3
1c2f0 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1c300 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1c310 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c  records that wil
1c320 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a  l be stored by.*
1c330 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
1c340 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  le..*/.case OP_O
1c350 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56  penPseudo: {.  V
1c360 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1c370 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c380 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1c390 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b  t( pOp->p3>=0 );
1c3a0 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1c3b0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1c3c0 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c  p1, pOp->p3, -1,
1c3d0 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d   0);.  if( pCx==
1c3e0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1c3f0 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1c400 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75  = 1;.  pCx->pseu
1c410 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70  doTableReg = pOp
1c420 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54  ->p2;.  pCx->isT
1c430 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73 65  able = 1;.  asse
1c440 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
1c450 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c460 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50   Opcode: Close P
1c470 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
1c480 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70  Close a cursor p
1c490 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
1c4a0 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69   as P1.  If P1 i
1c4b0 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74  s not.** current
1c4c0 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e  ly open, this in
1c4d0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e  struction is a n
1c4e0 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
1c4f0 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65  _Close: {.  asse
1c500 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1c510 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1c520 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65  rsor );.  sqlite
1c530 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1c540 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  p, p->apCsr[pOp-
1c550 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73  >p1]);.  p->apCs
1c560 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a  r[pOp->p1] = 0;.
1c570 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c580 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31  pcode: SeekGE P1
1c590 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1c5a0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1c5b0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1c5c0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1c5d0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1c5e0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1c5f0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1c600 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1c610 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1c620 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
1c630 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1c640 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1c650 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1c660 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1c670 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1c680 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1c690 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1c6a0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1c6b0 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1c6c0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1c6d0 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1c6e0 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1c6f0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1c700 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1c710 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1c720 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1c730 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1c740 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
1c750 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1c760 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1c770 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1c780 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1c790 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1c7a0 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1c7b0 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1c7c0 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
1c7d0 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
1c7e0 20 74 68 65 20 62 65 67 69 6e 69 6e 67 20 74 6f   the begining to
1c7f0 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
1c800 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1c810 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
1c820 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
1c830 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
1c840 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1c850 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1c860 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47  d, SeekLt, SeekG
1c870 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  t, SeekLe.*/./* 
1c880 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50  Opcode: SeekGT P
1c890 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1c8a0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1c8b0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1c8c0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1c8d0 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1c8e0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1c8f0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1c900 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1c910 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1c920 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
1c930 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1c940 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
1c950 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
1c960 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
1c970 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
1c980 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
1c990 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
1c9a0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1c9b0 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
1c9c0 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
1c9d0 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
1c9e0 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
1c9f0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1ca00 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
1ca10 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1ca20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1ca30 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20  records greater 
1ca40 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
1ca50 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1ca60 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1ca70 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
1ca80 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
1ca90 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
1caa0 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
1cab0 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
1cac0 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
1cad0 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
1cae0 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
1caf0 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1cb00 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1cb10 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
1cb20 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Prev..**.** Se
1cb30 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1cb40 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c  otFound, SeekLt,
1cb50 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1cb60 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1cb70 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  ekLT P1 P2 P3 P4
1cb80 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   * .** Synopsis:
1cb90 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1cba0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1cbb0 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1cbc0 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1cbd0 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1cbe0 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1cbf0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1cc00 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1cc10 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1cc20 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1cc30 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1cc40 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1cc50 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1cc60 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1cc70 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1cc80 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1cc90 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1cca0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1ccb0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1ccc0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1ccd0 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
1cce0 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
1ccf0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1cd00 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1cd10 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20  no records less 
1cd20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
1cd30 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1cd40 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1cd50 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
1cd60 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
1cd70 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
1cd80 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
1cd90 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a  reverse order,.*
1cda0 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74  * from the end t
1cdb0 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e  oward the beginn
1cdc0 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ing.  In other w
1cdd0 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
1cde0 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
1cdf0 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e  d to use Prev, n
1ce00 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53  ot Next..**.** S
1ce10 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1ce20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74  NotFound, SeekGt
1ce30 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
1ce40 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1ce50 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50  eekLE P1 P2 P3 P
1ce60 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1ce70 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1ce80 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1ce90 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1cea0 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1ceb0 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1cec0 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1ced0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1cee0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1cef0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1cf00 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1cf10 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1cf20 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1cf30 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1cf40 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1cf50 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1cf60 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1cf70 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1cf80 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1cf90 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
1cfa0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1cfb0 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1cfc0 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1cfd0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1cfe0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1cff0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1d000 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74  cords .** less t
1d010 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1d020 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1d030 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1d040 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1d050 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1d060 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1d070 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1d080 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
1d090 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1d0a0 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
1d0b0 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
1d0c0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1d0d0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1d0e0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1d0f0 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
1d100 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1d110 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1d120 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
1d130 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20   SeekLt.*/.case 
1d140 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20  OP_SeekLT:      
1d150 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1d160 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
1d170 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  E:         /* ju
1d180 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1d190 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20  OP_SeekGE:      
1d1a0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1d1b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
1d1c0 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  T: {       /* ju
1d1d0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
1d1e0 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a   res;.  int oc;.
1d1f0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1d200 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1d210 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65  rd r;.  int nFie
1d220 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20  ld;.  i64 iKey; 
1d230 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69       /* The rowi
1d240 64 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b  d we are to seek
1d250 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74   to */..  assert
1d260 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1d270 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1d280 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1d290 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20  pOp->p2!=0 );.  
1d2a0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1d2b0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1d2c0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1d2d0 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
1d2e0 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
1d2f0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1d300 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31  E == OP_SeekLT+1
1d310 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1d320 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65  _SeekGE == OP_Se
1d330 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65  ekLT+2 );.  asse
1d340 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d  rt( OP_SeekGT ==
1d350 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a   OP_SeekLT+3 );.
1d360 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1d370 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73  Ordered );.  ass
1d380 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1d390 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f  !=0 );.  oc = pO
1d3a0 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 70 43 2d  p->opcode;.  pC-
1d3b0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69  >nullRow = 0;.#i
1d3c0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1d3d0 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
1d3e0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65   pOp->opcode;.#e
1d3f0 6e 64 69 66 0a 20 20 69 66 28 20 70 43 2d 3e 69  ndif.  if( pC->i
1d400 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  sTable ){.    /*
1d410 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65   The input value
1d420 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20   in P3 might be 
1d430 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74  of any type: int
1d440 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69  eger, real, stri
1d450 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c  ng,.    ** blob,
1d460 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69   or NULL.  But i
1d470 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e  t needs to be an
1d480 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20   integer before 
1d490 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a  we can do.    **
1d4a0 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
1d4b0 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20  vert it. */.    
1d4c0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
1d4d0 2d 3e 70 33 5d 3b 0a 20 20 20 20 41 70 70 6c 79  ->p3];.    Apply
1d4e0 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
1d4f0 70 49 6e 33 29 3b 0a 20 20 20 20 69 4b 65 79 20  pIn3);.    iKey 
1d500 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
1d510 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20 20 20  Value(pIn3);.   
1d520 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1d530 64 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 49  d = 0;..    /* I
1d540 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
1d550 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76  ould not be conv
1d560 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e  erted into an in
1d570 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20  teger without.  
1d580 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66    ** loss of inf
1d590 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73  ormation, then s
1d5a0 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e  pecial processin
1d5b0 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e  g is required...
1d5c0 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 49 6e   */.    if( (pIn
1d5d0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
1d5e0 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
1d5f0 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1d600 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
1d610 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  ){.        /* If
1d620 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 61   the P3 value ca
1d630 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
1d640 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20  d into any kind 
1d650 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20  of a number,.   
1d660 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
1d670 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73   seek is not pos
1d680 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74  sible, so jump t
1d690 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  o P2 */.        
1d6a0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1d6b0 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  ;  VdbeBranchTak
1d6c0 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 20 20 20  en(1,2);.       
1d6d0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
1d6e0 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
1d6f0 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69   approximation i
1d700 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20 74 68  Key is larger th
1d710 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65  an the actual re
1d720 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20  al search.      
1d730 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74  ** term, substit
1d740 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64  ute >= for > and
1d750 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20   < for <=. e.g. 
1d760 69 66 20 74 68 65 20 73 65 61 72 63 68 20 74 65  if the search te
1d770 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34  rm.      ** is 4
1d780 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67  .9 and the integ
1d790 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  er approximation
1d7a0 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20   5:.      **.   
1d7b0 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20     **        (x 
1d7c0 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20  >  4.9)    ->   
1d7d0 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20    (x >= 5).     
1d7e0 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d   **        (x <=
1d7f0 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20   4.9)    ->     
1d800 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a  (x <  5).      *
1d810 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e 33  /.      if( pIn3
1d820 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79  ->r<(double)iKey
1d830 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1d840 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28  rt( OP_SeekGE==(
1d850 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a  OP_SeekGT-1) );.
1d860 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1d870 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53  OP_SeekLT==(OP_S
1d880 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20  eekLE-1) );.    
1d890 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f      assert( (OP_
1d8a0 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30 31 29  SeekLE & 0x0001)
1d8b0 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30  ==(OP_SeekGT & 0
1d8c0 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20  x0001) );.      
1d8d0 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30    if( (oc & 0x00
1d8e0 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20  01)==(OP_SeekGT 
1d8f0 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d 2d  & 0x0001) ) oc--
1d900 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
1d910 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f   /* If the appro
1d920 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73  ximation iKey is
1d930 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 68   smaller than th
1d940 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65  e actual real se
1d950 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65  arch.      ** te
1d960 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3c  rm, substitute <
1d970 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f  = for < and > fo
1d980 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20  r >=.  */.      
1d990 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e 72  else if( pIn3->r
1d9a0 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b  >(double)iKey ){
1d9b0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1d9c0 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f   OP_SeekLE==(OP_
1d9d0 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20  SeekLT+1) );.   
1d9e0 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
1d9f0 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b  SeekGT==(OP_Seek
1da00 47 45 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20  GE+1) );.       
1da10 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65   assert( (OP_See
1da20 6b 4c 54 20 26 20 30 78 30 30 30 31 29 3d 3d 28  kLT & 0x0001)==(
1da30 4f 50 5f 53 65 65 6b 47 45 20 26 20 30 78 30 30  OP_SeekGE & 0x00
1da40 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69  01) );.        i
1da50 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29  f( (oc & 0x0001)
1da60 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30  ==(OP_SeekLT & 0
1da70 78 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20  x0001) ) oc++;. 
1da80 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20       }.    } .  
1da90 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1daa0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1dab0 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
1dac0 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20  , (u64)iKey, 0, 
1dad0 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72  &res);.    if( r
1dae0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1daf0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1db00 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1db10 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73     }.    if( res
1db20 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 43 2d  ==0 ){.      pC-
1db30 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1db40 31 3b 0a 20 20 20 20 20 20 70 43 2d 3e 6c 61 73  1;.      pC->las
1db50 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20  tRowid = iKey;. 
1db60 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1db70 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
1db80 70 34 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74  p4.i;.    assert
1db90 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1dba0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61  4_INT32 );.    a
1dbb0 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
1dbc0 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  );.    r.pKeyInf
1dbd0 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
1dbe0 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
1dbf0 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20   (u16)nField;.. 
1dc00 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c     /* The next l
1dc10 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70  ine of code comp
1dc20 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c  utes as follows,
1dc30 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20   only faster:.  
1dc40 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f    **   if( oc==O
1dc50 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d  P_SeekGT || oc==
1dc60 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20  OP_SeekLE ){.   
1dc70 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c   **     r.defaul
1dc80 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a  t_rc = -1;.    *
1dc90 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a  *   }else{.    *
1dca0 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  *     r.default_
1dcb0 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20  rc = +1;.    ** 
1dcc0 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72    }.    */.    r
1dcd0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 28 28  .default_rc = ((
1dce0 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65  1 & (oc - OP_See
1dcf0 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29  kLT)) ? -1 : +1)
1dd00 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
1dd10 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72  !=OP_SeekGT || r
1dd20 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20  .default_rc==-1 
1dd30 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
1dd40 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20  c!=OP_SeekLE || 
1dd50 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31  r.default_rc==-1
1dd60 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1dd70 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  oc!=OP_SeekGE ||
1dd80 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b   r.default_rc==+
1dd90 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
1dda0 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c   oc!=OP_SeekLT |
1ddb0 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
1ddc0 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65  +1 );..    r.aMe
1ddd0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
1dde0 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  3];.#ifdef SQLIT
1ddf0 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e  E_DEBUG.    { in
1de00 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
1de10 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
1de20 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1de30 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
1de40 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 45 78   }.#endif.    Ex
1de50 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29  pandBlob(r.aMem)
1de60 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1de70 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1de80 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1de90 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
1dea0 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  s);.    if( rc!=
1deb0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1dec0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1ded0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1dee0 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49  }.    pC->rowidI
1def0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a  sValid = 0;.  }.
1df00 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1df10 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
1df20 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1df30 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65  CHE_STALE;.#ifde
1df40 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1df50 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
1df60 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
1df70 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b   if( oc>=OP_Seek
1df80 47 45 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f  GE ){  assert( o
1df90 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  c==OP_SeekGE || 
1dfa0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b  oc==OP_SeekGT );
1dfb0 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c  .    if( res<0 |
1dfc0 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
1dfd0 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20  =OP_SeekGT) ){. 
1dfe0 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1dff0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1e000 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70 43  BtreeNext(pC->pC
1e010 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1e020 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1e030 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1e040 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1e050 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  .      pC->rowid
1e060 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1e070 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65   }else{.      re
1e080 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  s = 0;.    }.  }
1e090 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
1e0a0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20  ( oc==OP_SeekLT 
1e0b0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
1e0c0 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e   );.    if( res>
1e0d0 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
1e0e0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29  oc==OP_SeekLT) )
1e0f0 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
1e100 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1e110 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
1e120 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1e130 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
1e140 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1e150 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1e160 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 70 43  _error;.      pC
1e170 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1e180 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
1e190 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68       /* res migh
1e1a0 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65  t be negative be
1e1b0 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
1e1c0 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b  is empty.  Check
1e1d0 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65   to.      ** see
1e1e0 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20   if this is the 
1e1f0 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  case..      */. 
1e200 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74       res = sqlit
1e210 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 70  e3BtreeEof(pC->p
1e220 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
1e230 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
1e240 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65  ->p2>0 );.  Vdbe
1e250 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
1e260 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
1e270 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
1e280 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
1e290 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1e2a0 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32 20  ode: Seek P1 P2 
1e2b0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
1e2c0 73 3a 20 20 69 6e 74 6b 65 79 3d 72 5b 50 32 5d  s:  intkey=r[P2]
1e2d0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20  .**.** P1 is an 
1e2e0 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73 6f  open table curso
1e2f0 72 20 61 6e 64 20 50 32 20 69 73 20 61 20 72 6f  r and P2 is a ro
1e300 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41 72  wid integer.  Ar
1e310 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20  range.** for P1 
1e320 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74 20  to move so that 
1e330 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1e340 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79 20   rowid given by 
1e350 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
1e360 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65 66  s actually a def
1e370 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74  erred seek.  Not
1e380 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61  hing actually ha
1e390 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74  ppens until.** t
1e3a0 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65  he cursor is use
1e3b0 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f  d to read a reco
1e3c0 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69  rd.  That way, i
1e3d0 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63  f no reads.** oc
1e3e0 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73  cur, no unnecess
1e3f0 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e  ary I/O happens.
1e400 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
1e410 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f  : {    /* in2 */
1e420 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1e430 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  C;..  assert( pO
1e440 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1e450 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1e460 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1e470 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1e480 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1e490 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1e4a0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
1e4b0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1e4c0 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   );.  pC->nullRo
1e4d0 77 20 3d 20 30 3b 0a 20 20 70 49 6e 32 20 3d 20  w = 0;.  pIn2 = 
1e4e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
1e4f0 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
1e500 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  et = sqlite3Vdbe
1e510 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
1e520 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1e530 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65  id = 0;.  pC->de
1e540 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31  ferredMoveto = 1
1e550 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a  ;.  break;.}.  .
1e560 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e  ./* Opcode: Foun
1e570 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
1e580 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1e590 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1e5a0 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
1e5b0 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
1e5c0 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
1e5d0 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
1e5e0 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
1e5f0 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
1e600 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
1e610 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
1e620 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
1e630 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a  d.** record..**.
1e640 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
1e650 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
1e660 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72  e.  If the recor
1e670 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  d identified by 
1e680 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20  P3 and P4.** is 
1e690 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20  a prefix of any 
1e6a0 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e  entry in P1 then
1e6b0 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   a jump is made 
1e6c0 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20  to P2 and.** P1 
1e6d0 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
1e6e0 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67   at the matching
1e6f0 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68   entry..**.** Th
1e700 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
1e710 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
1e720 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
1e730 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76  it can be.** adv
1e740 61 6e 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72  anced in the for
1e750 77 61 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20  ward direction. 
1e760 20 54 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75   The Next instru
1e770 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c  ction will work,
1e780 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20  .** but not the 
1e790 50 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e  Prev instruction
1e7a0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1e7b0 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f  : NotFound, NoCo
1e7c0 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74  nflict, NotExist
1e7d0 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20  s. SeekGe.*/./* 
1e7e0 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64  Opcode: NotFound
1e7f0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1e800 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1e810 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1e820 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67  f P4==0 then reg
1e830 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
1e840 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
1e850 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
1e860 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65    If.** P4>0 the
1e870 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
1e880 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
1e890 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
1e8a0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
1e8b0 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a  .** record..** .
1e8c0 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
1e8d0 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
1e8e0 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72  e.  If the recor
1e8f0 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  d identified by 
1e900 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20  P3 and P4.** is 
1e910 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78 20 6f  not the prefix o
1e920 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  f any entry in P
1e930 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73  1 then a jump is
1e940 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66   made to P2.  If
1e950 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e   P1 .** does con
1e960 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68  tain an entry wh
1e970 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74 63 68  ose prefix match
1e980 65 73 20 74 68 65 20 50 33 2f 50 34 20 72 65 63  es the P3/P4 rec
1e990 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c  ord then control
1e9a0 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67  .** falls throug
1e9b0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
1e9c0 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31  struction and P1
1e9d0 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
1e9e0 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63  g at the.** matc
1e9f0 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a  hing entry..**.*
1ea00 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
1ea10 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1ea20 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
1ea30 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
1ea40 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20  .** advanced in 
1ea50 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
1ea60 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1ea70 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
1ea80 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20  Prev.** opcodes 
1ea90 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65  do not work afte
1eaa0 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  r this operation
1eab0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1eac0 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73  : Found, NotExis
1ead0 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a  ts, NoConflict.*
1eae0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43  /./* Opcode: NoC
1eaf0 6f 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50 33  onflict P1 P2 P3
1eb00 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1eb10 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1eb20 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
1eb30 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1eb40 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1eb50 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1eb60 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
1eb70 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
1eb80 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
1eb90 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
1eba0 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
1ebb0 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
1ebc0 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72  d..** .** Cursor
1ebd0 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
1ebe0 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
1ebf0 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
1ec00 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
1ec10 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79  .** contains any
1ec20 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d   NULL value, jum
1ec30 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1ec40 20 50 32 2e 20 20 49 66 20 61 6c 6c 20 74 65 72   P2.  If all ter
1ec50 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63  ms of the.** rec
1ec60 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c  ord are not-NULL
1ec70 20 74 68 65 6e 20 61 20 63 68 65 63 6b 20 69 73   then a check is
1ec80 20 64 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d 69   done to determi
1ec90 6e 65 20 69 66 20 61 6e 79 20 72 6f 77 20 69 6e  ne if any row in
1eca0 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78   the.** P1 index
1ecb0 20 62 74 72 65 65 20 68 61 73 20 61 20 6d 61 74   btree has a mat
1ecc0 63 68 69 6e 67 20 6b 65 79 20 70 72 65 66 69 78  ching key prefix
1ecd0 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
1ece0 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70  no matches, jump
1ecf0 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  .** immediately 
1ed00 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65 72 65  to P2.  If there
1ed10 20 69 73 20 61 20 6d 61 74 63 68 2c 20 66 61 6c   is a match, fal
1ed20 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6c 65  l through and le
1ed30 61 76 65 20 74 68 65 20 50 31 0a 2a 2a 20 63 75  ave the P1.** cu
1ed40 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
1ed50 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 72 6f   the matching ro
1ed60 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  w..**.** This op
1ed70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c 61 72 20  code is similar 
1ed80 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77  to OP_NotFound w
1ed90 69 74 68 20 74 68 65 20 65 78 63 65 70 74 69 6f  ith the exceptio
1eda0 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 62  ns that the.** b
1edb0 72 61 6e 63 68 20 69 73 20 61 6c 77 61 79 73 20  ranch is always 
1edc0 74 61 6b 65 6e 20 69 66 20 61 6e 79 20 70 61 72  taken if any par
1edd0 74 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20  t of the search 
1ede0 6b 65 79 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  key input is NUL
1edf0 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  L..**.** This op
1ee00 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74  eration leaves t
1ee10 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
1ee20 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
1ee30 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e  nnot be.** advan
1ee40 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69  ced in either di
1ee50 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rection.  In oth
1ee60 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65  er words, the Ne
1ee70 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f  xt and Prev.** o
1ee80 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f  pcodes do not wo
1ee90 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70  rk after this op
1eea0 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  eration..**.** S
1eeb0 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e  ee also: NotFoun
1eec0 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69  d, Found, NotExi
1eed0 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  sts.*/.case OP_N
1eee0 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f  oConflict:     /
1eef0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1ef00 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a  ase OP_NotFound:
1ef10 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1ef20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  in3 */.case OP_F
1ef30 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  ound: {        /
1ef40 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1ef50 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73   int alreadyExis
1ef60 74 73 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20  ts;.  int ii;.  
1ef70 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1ef80 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61    int res;.  cha
1ef90 72 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61  r *pFree;.  Unpa
1efa0 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78  ckedRecord *pIdx
1efb0 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  Key;.  UnpackedR
1efc0 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20  ecord r;.  char 
1efd0 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28  aTempRec[ROUND8(
1efe0 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52  sizeof(UnpackedR
1eff0 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66  ecord)) + sizeof
1f000 28 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23  (Mem)*4 + 7];..#
1f010 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
1f020 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  T.  if( pOp->opc
1f030 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  ode!=OP_NoConfli
1f040 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75  ct ) sqlite3_fou
1f050 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  nd_count++;.#end
1f060 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  if..  assert( pO
1f070 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1f080 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1f090 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1f0a0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1f0b0 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  2 );.  pC = p->a
1f0c0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1f0d0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1f0e0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1f0f0 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
1f100 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  Op = pOp->opcode
1f110 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20  ;.#endif.  pIn3 
1f120 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1f130 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1f140 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
1f150 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1f160 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 70 46 72 65  ble==0 );.  pFre
1f170 65 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  e = 0;  /* Not n
1f180 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
1f190 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 61 20  d to suppress a 
1f1a0 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67  compiler warning
1f1b0 2e 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e  . */.  if( pOp->
1f1c0 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e  p4.i>0 ){.    r.
1f1d0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
1f1e0 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
1f1f0 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
1f200 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d  ->p4.i;.    r.aM
1f210 65 6d 20 3d 20 70 49 6e 33 3b 0a 20 20 20 20 66  em = pIn3;.    f
1f220 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46  or(ii=0; ii<r.nF
1f230 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  ield; ii++){.   
1f240 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
1f250 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69  Valid(&r.aMem[ii
1f260 5d 29 20 29 3b 0a 20 20 20 20 20 20 45 78 70 61  ]) );.      Expa
1f270 6e 64 42 6c 6f 62 28 26 72 2e 61 4d 65 6d 5b 69  ndBlob(&r.aMem[i
1f280 69 5d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  i]);.#ifdef SQLI
1f290 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20 20 69  TE_DEBUG.      i
1f2a0 66 28 20 69 69 20 29 20 52 45 47 49 53 54 45 52  f( ii ) REGISTER
1f2b0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69  _TRACE(pOp->p3+i
1f2c0 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b  i, &r.aMem[ii]);
1f2d0 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20  .#endif.    }.  
1f2e0 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a    pIdxKey = &r;.
1f2f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 64    }else{.    pId
1f300 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  xKey = sqlite3Vd
1f310 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52  beAllocUnpackedR
1f320 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20 20 70  ecord(.        p
1f330 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65  C->pKeyInfo, aTe
1f340 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54  mpRec, sizeof(aT
1f350 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a  empRec), &pFree.
1f360 20 20 20 20 29 3b 20 0a 20 20 20 20 69 66 28 20      ); .    if( 
1f370 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74  pIdxKey==0 ) got
1f380 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
1f390 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1f3a0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
1f3b0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e      assert( (pIn
1f3c0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  3->flags & MEM_Z
1f3d0 65 72 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a  ero)==0 );  /* z
1f3e0 65 72 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64 79  eroblobs already
1f3f0 20 65 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20   expanded */.   
1f400 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f   sqlite3VdbeReco
1f410 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65  rdUnpack(pC->pKe
1f420 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20  yInfo, pIn3->n, 
1f430 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79  pIn3->z, pIdxKey
1f440 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79  );.  }.  pIdxKey
1f450 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  ->default_rc = 0
1f460 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
1f470 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  ode==OP_NoConfli
1f480 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72  ct ){.    /* For
1f490 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69   the OP_NoConfli
1f4a0 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20  ct opcode, take 
1f4b0 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20  the jump if any 
1f4c0 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e  of the.    ** in
1f4d0 70 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e  put fields are N
1f4e0 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b  ULL, since any k
1f4f0 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77  ey with a NULL w
1f500 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63  ill not.    ** c
1f510 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66  onflict */.    f
1f520 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46  or(ii=0; ii<r.nF
1f530 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  ield; ii++){.   
1f540 20 20 20 69 66 28 20 72 2e 61 4d 65 6d 5b 69 69     if( r.aMem[ii
1f550 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
1f560 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63  ll ){.        pc
1f570 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20   = pOp->p2 - 1; 
1f580 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
1f590 31 2c 32 29 3b 0a 20 20 20 20 20 20 20 20 62 72  1,2);.        br
1f5a0 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
1f5b0 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71   }.  }.  rc = sq
1f5c0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1f5d0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1f5e0 72 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30  rsor, pIdxKey, 0
1f5f0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66  , 0, &res);.  if
1f600 28 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 29  ( pOp->p4.i==0 )
1f610 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
1f620 72 65 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a  ree(db, pFree);.
1f630 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51    }.  if( rc!=SQ
1f640 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 62  LITE_OK ){.    b
1f650 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e  reak;.  }.  pC->
1f660 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73  seekResult = res
1f670 3b 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74  ;.  alreadyExist
1f680 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20  s = (res==0);.  
1f690 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d  pC->nullRow = 1-
1f6a0 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20  alreadyExists;. 
1f6b0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1f6c0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
1f6d0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1f6e0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
1f6f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1f700 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56 64 62  Found ){.    Vdb
1f710 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72  eBranchTaken(alr
1f720 65 61 64 79 45 78 69 73 74 73 21 3d 30 2c 32 29  eadyExists!=0,2)
1f730 3b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64  ;.    if( alread
1f740 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70  yExists ) pc = p
1f750 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65  Op->p2 - 1;.  }e
1f760 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
1f770 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79  nchTaken(already
1f780 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20  Exists==0,2);.  
1f790 20 20 69 66 28 20 21 61 6c 72 65 61 64 79 45 78    if( !alreadyEx
1f7a0 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d  ists ) pc = pOp-
1f7b0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
1f7c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1f7d0 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
1f7e0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
1f7f0 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
1f800 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P3].**.** P1 is
1f810 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
1f820 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
1f830 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65  n SQL table btre
1f840 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a  e (with integer.
1f850 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73  ** keys).  P3 is
1f860 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69   an integer rowi
1f870 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e  d.  If P1 does n
1f880 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ot contain a rec
1f890 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69  ord with.** rowi
1f8a0 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69  d P3 then jump i
1f8b0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1f8c0 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f  .  If P1 does co
1f8d0 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 0a 2a  ntain a record.*
1f8e0 2a 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20  * with rowid P3 
1f8f0 74 68 65 6e 20 6c 65 61 76 65 20 74 68 65 20 63  then leave the c
1f900 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61  ursor pointing a
1f910 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e  t that record an
1f920 64 20 66 61 6c 6c 0a 2a 2a 20 74 68 72 6f 75 67  d fall.** throug
1f930 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
1f940 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
1f950 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64   The OP_NotFound
1f960 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73   opcode performs
1f970 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
1f980 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72  ion on index btr
1f990 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62  ees.** (with arb
1f9a0 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c  itrary multi-val
1f9b0 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20  ue keys)..**.** 
1f9c0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1f9d0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
1f9e0 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
1f9f0 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61  t cannot be adva
1fa00 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65  nced.** in eithe
1fa10 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
1fa20 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1fa30 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20  e Next and Prev 
1fa40 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20  opcodes will.** 
1fa50 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69  not work followi
1fa60 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
1fa70 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1fa80 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1fa90 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63   NoConflict.*/.c
1faa0 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  ase OP_NotExists
1fab0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
1fac0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62  mp, in3 */.  Vdb
1fad0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
1fae0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
1faf0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34    int res;.  u64
1fb00 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d   iKey;..  pIn3 =
1fb10 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1fb20 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
1fb30 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1fb40 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1fb50 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1fb60 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1fb70 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1fb80 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1fb90 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
1fba0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1fbb0 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
1fbc0 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73  = 0;.#endif.  as
1fbd0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1fbe0 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
1fbf0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
1fc00 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  g==0 );.  pCrsr 
1fc10 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
1fc20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
1fc30 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  0 );.  res = 0;.
1fc40 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75    iKey = pIn3->u
1fc50 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  .i;.  rc = sqlit
1fc60 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1fc70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20  acked(pCrsr, 0, 
1fc80 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
1fc90 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20    pC->lastRowid 
1fca0 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 70  = pIn3->u.i;.  p
1fcb0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1fcc0 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20  = res==0 ?1:0;. 
1fcd0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
1fce0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
1fcf0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1fd00 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  E;.  pC->deferre
1fd10 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56  dMoveto = 0;.  V
1fd20 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
1fd30 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
1fd40 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 70 63  res!=0 ){.    pc
1fd50 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1fd60 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1fd70 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20  rowidIsValid==0 
1fd80 29 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65  );.  }.  pC->see
1fd90 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20  kResult = res;. 
1fda0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1fdb0 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50  code: Sequence P
1fdc0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
1fdd0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75  nopsis: r[P2]=cu
1fde0 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a  rsor[P1].ctr++.*
1fdf0 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65  *.** Find the ne
1fe00 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71  xt available seq
1fe10 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72  uence number for
1fe20 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57   cursor P1..** W
1fe30 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63  rite the sequenc
1fe40 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65  e number into re
1fe50 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68  gister P2..** Th
1fe60 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
1fe70 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20  r on the cursor 
1fe80 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61  is incremented a
1fe90 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73  fter this.** ins
1fea0 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63  truction.  .*/.c
1feb0 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a  ase OP_Sequence:
1fec0 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
1fed0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
1fee0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
1fef0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1ff00 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1ff10 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
1ff20 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20  Csr[pOp->p1]!=0 
1ff30 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
1ff40 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1ff50 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a  1]->seqCount++;.
1ff60 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
1ff70 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64  Opcode: NewRowid
1ff80 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1ff90 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
1ffa0 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74  =rowid.**.** Get
1ffb0 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72   a new integer r
1ffc0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e  ecord number (a.
1ffd0 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65  k.a "rowid") use
1ffe0 64 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20  d as the key to 
1fff0 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  a table..** The 
20000 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
20010 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
20020 75 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e  used as a key in
20030 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
20040 20 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73   table that curs
20050 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e  or P1 points to.
20060 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64    The new record
20070 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74   number is writt
20080 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f  en.** written to
20090 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
200a0 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e  .** If P3>0 then
200b0 20 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65   P3 is a registe
200c0 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
200d0 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45  ame of this VDBE
200e0 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20   that holds .** 
200f0 74 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76  the largest prev
20100 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64  iously generated
20110 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
20120 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75  No new record nu
20130 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c  mbers are.** all
20140 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20  owed to be less 
20150 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e  than this value.
20160 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65   When this value
20170 20 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78   reaches its max
20180 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c  imum, .** an SQL
20190 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69  ITE_FULL error i
201a0 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65  s generated. The
201b0 20 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20   P3 register is 
201c0 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
201d0 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20   '.** generated 
201e0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54  record number. T
201f0 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d  his P3 mechanism
20200 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70   is used to help
20210 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a   implement the.*
20220 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  * AUTOINCREMENT 
20230 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65  feature..*/.case
20240 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20   OP_NewRowid: { 
20250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
20260 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
20270 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20 20    i64 v;        
20280 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
20290 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56  new rowid */.  V
202a0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
202b0 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
202c0 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20  of table to get 
202d0 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f  the new rowid */
202e0 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20  .  int res;     
202f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
20300 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65  ult of an sqlite
20310 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a  3BtreeLast() */.
20320 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20    int cnt;      
20330 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e           /* Coun
20340 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  ter to limit the
20350 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63   number of searc
20360 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  hes */.  Mem *pM
20370 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
20380 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
20390 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69  ing largest rowi
203a0 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d  d for AUTOINCREM
203b0 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ENT */.  VdbeFra
203c0 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20  me *pFrame;     
203d0 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66  /* Root frame of
203e0 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20   VDBE */..  v = 
203f0 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  0;.  res = 0;.  
20400 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
20410 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
20420 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
20430 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
20440 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
20450 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e  pC!=0 );.  if( N
20460 45 56 45 52 28 70 43 2d 3e 70 43 75 72 73 6f 72  EVER(pC->pCursor
20470 3d 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54  ==0) ){.    /* T
20480 68 65 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69  he zero initiali
20490 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20  zation above is 
204a0 61 6c 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64  all that is need
204b0 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20  ed */.  }else{. 
204c0 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72     /* The next r
204d0 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e  owid or record n
204e0 75 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74  umber (different
204f0 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73   terms for the s
20500 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67  ame.    ** thing
20510 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e  ) is obtained in
20520 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f   a two-step algo
20530 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20  rithm..    **.  
20540 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74    ** First we at
20550 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68  tempt to find th
20560 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69  e largest existi
20570 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64  ng rowid and add
20580 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74   one.    ** to t
20590 68 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65  hat.  But if the
205a0 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
205b0 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61  g rowid is alrea
205c0 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20  dy the maximum. 
205d0 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69     ** positive i
205e0 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20  nteger, we have 
205f0 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  to fall through 
20600 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20  to the second.  
20610 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74    ** probabilist
20620 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20  ic algorithm.   
20630 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73   **.    ** The s
20640 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20  econd algorithm 
20650 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72  is to select a r
20660 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  owid at random a
20670 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a  nd see if.    **
20680 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73   it already exis
20690 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ts in the table.
206a0 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
206b0 20 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a   exist, we have.
206c0 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64      ** succeeded
206d0 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d  .  If the random
206e0 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73   rowid does exis
206f0 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e  t, we select a n
20700 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e  ew one.    ** an
20710 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20  d try again, up 
20720 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20  to 100 times..  
20730 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
20740 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
20750 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33  .#ifdef SQLITE_3
20760 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64  2BIT_ROWID.#   d
20770 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
20780 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65  0x7fffffff.#else
20790 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d  .    /* Some com
207a0 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20  pilers complain 
207b0 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20  about constants 
207c0 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66  of the form 0x7f
207d0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a  ffffffffffffff..
207e0 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f      ** Others co
207f0 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37  mplain about 0x7
20800 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  ffffffffffffffff
20810 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  LL.  The followi
20820 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20  ng macro seems. 
20830 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65     ** to provide
20840 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68   the constant wh
20850 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63  ile making all c
20860 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a  ompilers happy..
20870 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e      */.#   defin
20880 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36  e MAX_ROWID  (i6
20890 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66  4)( (((u64)0x7ff
208a0 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75  fffff)<<32) | (u
208b0 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a  64)0xffffffff ).
208c0 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20  #endif..    if( 
208d0 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f  !pC->useRandomRo
208e0 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20  wid ){.      rc 
208f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
20900 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  st(pC->pCursor, 
20910 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
20920 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
20930 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
20940 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
20950 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
20960 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
20970 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20      v = 1;   /* 
20980 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30  IMP: R-61914-480
20990 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73  74 */.      }els
209a0 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  e{.        asser
209b0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
209c0 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d  ursorIsValid(pC-
209d0 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >pCursor) );.   
209e0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
209f0 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
20a00 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  ->pCursor, &v);.
20a10 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
20a20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
20a30 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69     /* Cannot fai
20a40 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65  l following Btre
20a50 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20  eLast() */.     
20a60 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f     if( v>=MAX_RO
20a70 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20  WID ){.         
20a80 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
20a90 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  wid = 1;.       
20aa0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
20ab0 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a    v++;   /* IMP:
20ac0 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a   R-29538-34987 *
20ad0 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  /.        }.    
20ae0 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64    }.    }..#ifnd
20af0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
20b00 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20  UTOINCREMENT.   
20b10 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
20b20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
20b30 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
20b40 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
20b50 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
20b60 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
20b70 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d      if( p->pFram
20b80 65 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  e ){.        for
20b90 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
20ba0 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
20bb0 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
20bc0 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
20bd0 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
20be0 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
20bf0 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
20c00 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
20c10 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d  ( pOp->p3<=pFram
20c20 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  e->nMem );.     
20c30 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d     pMem = &pFram
20c40 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  e->aMem[pOp->p3]
20c50 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
20c60 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
20c70 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
20c80 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
20c90 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
20ca0 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
20cb0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
20cc0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65  ) );.        pMe
20cd0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
20ce0 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41  3];.        memA
20cf0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
20d00 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  pMem);.      }. 
20d10 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
20d20 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b  IsValid(pMem) );
20d30 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ..      REGISTER
20d40 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
20d50 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c  pMem);.      sql
20d60 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
20d70 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20  erify(pMem);.   
20d80 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d     assert( (pMem
20d90 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
20da0 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d  t)!=0 );  /* mem
20db0 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e  (P3) holds an in
20dc0 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 69  teger */.      i
20dd0 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41  f( pMem->u.i==MA
20de0 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75  X_ROWID || pC->u
20df0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
20e00 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
20e10 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20  LITE_FULL;   /* 
20e20 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36 31 33  IMP: R-12275-613
20e30 33 38 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f  38 */.        go
20e40 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
20e50 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
20e60 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d       if( v<pMem-
20e70 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20  >u.i+1 ){.      
20e80 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20    v = pMem->u.i 
20e90 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  + 1;.      }.   
20ea0 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76     pMem->u.i = v
20eb0 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
20ec0 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61     if( pC->useRa
20ed0 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
20ee0 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41     /* IMPLEMENTA
20ef0 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37  TION-OF: R-07677
20f00 2d 34 31 38 38 31 20 49 66 20 74 68 65 20 6c 61  -41881 If the la
20f10 72 67 65 73 74 20 52 4f 57 49 44 20 69 73 20 65  rgest ROWID is e
20f20 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20  qual to the.    
20f30 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73    ** largest pos
20f40 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39  sible integer (9
20f50 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
20f60 30 37 29 20 74 68 65 6e 20 74 68 65 20 64 61 74  07) then the dat
20f70 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65  abase.      ** e
20f80 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70 69 63  ngine starts pic
20f90 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61  king positive ca
20fa0 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73 20 61  ndidate ROWIDs a
20fb0 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20  t random until. 
20fc0 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73       ** it finds
20fd0 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74   one that is not
20fe0 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
20ff0 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  . */.      asser
21000 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b  t( pOp->p3==0 );
21010 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62    /* We cannot b
21020 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69  e in random rowi
21030 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69  d mode if this i
21040 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s.              
21050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
21060 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  * an AUTOINCREME
21070 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20  NT table. */.   
21080 20 20 20 2f 2a 20 6f 6e 20 74 68 65 20 66 69 72     /* on the fir
21090 73 74 20 61 74 74 65 6d 70 74 2c 20 73 69 6d 70  st attempt, simp
210a0 6c 79 20 64 6f 20 6f 6e 65 20 6d 6f 72 65 20 74  ly do one more t
210b0 68 61 6e 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a  han previous */.
210c0 20 20 20 20 20 20 76 20 3d 20 6c 61 73 74 52 6f        v = lastRo
210d0 77 69 64 3b 0a 20 20 20 20 20 20 76 20 26 3d 20  wid;.      v &= 
210e0 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20  (MAX_ROWID>>1); 
210f0 2f 2a 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27  /* ensure doesn'
21100 74 20 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f  t go negative */
21110 0a 20 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20 65  .      v++; /* e
21120 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a  nsure non-zero *
21130 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b  /.      cnt = 0;
21140 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 20 20  .      while(   
21150 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74  ((rc = sqlite3Bt
21160 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
21170 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
21180 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20  , (u64)v,.      
21190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211b0 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26 72             0, &r
211c0 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29  es))==SQLITE_OK)
211d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
211e0 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20  (res==0).       
211f0 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31       && (++cnt<1
21200 30 30 29 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  00)){.        /*
21210 20 63 6f 6c 6c 69 73 69 6f 6e 20 2d 20 74 72 79   collision - try
21220 20 61 6e 6f 74 68 65 72 20 72 61 6e 64 6f 6d 20   another random 
21230 72 6f 77 69 64 20 2a 2f 0a 20 20 20 20 20 20 20  rowid */.       
21240 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e   sqlite3_randomn
21250 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26  ess(sizeof(v), &
21260 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  v);.        if( 
21270 63 6e 74 3c 35 20 29 7b 0a 20 20 20 20 20 20 20  cnt<5 ){.       
21280 20 20 20 2f 2a 20 74 72 79 20 22 73 6d 61 6c 6c     /* try "small
21290 22 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 73 20  " random rowids 
212a0 66 6f 72 20 74 68 65 20 69 6e 69 74 69 61 6c 20  for the initial 
212b0 61 74 74 65 6d 70 74 73 20 2a 2f 0a 20 20 20 20  attempts */.    
212c0 20 20 20 20 20 20 76 20 26 3d 20 30 78 66 66 66        v &= 0xfff
212d0 66 66 66 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  fff;.        }el
212e0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20  se{.          v 
212f0 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31  &= (MAX_ROWID>>1
21300 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f 65  ); /* ensure doe
21310 73 6e 27 74 20 67 6f 20 6e 65 67 61 74 69 76 65  sn't go negative
21320 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   */.        }.  
21330 20 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e        v++; /* en
21340 73 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f  sure non-zero */
21350 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
21360 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
21370 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20   && res==0 ){.  
21380 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
21390 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50  E_FULL;   /* IMP
213a0 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20  : R-38219-53002 
213b0 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  */.        goto 
213c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
213d0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
213e0 20 20 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b    assert( v>0 );
213f0 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32    /* EV: R-40812
21400 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a  -03570 */.    }.
21410 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
21420 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43  alid = 0;.    pC
21430 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
21440 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
21450 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
21460 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70  E_STALE;.  }.  p
21470 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
21480 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
21490 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50  ode: Insert P1 P
214a0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
214b0 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
214c0 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a  [P3] data=r[P2].
214d0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65  **.** Write an e
214e0 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61  ntry into the ta
214f0 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31  ble of cursor P1
21500 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69  .  A new entry i
21510 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20  s.** created if 
21520 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61  it doesn't alrea
21530 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20  dy exist or the 
21540 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73  data for an exis
21550 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73  ting.** entry is
21560 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54   overwritten.  T
21570 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76  he data is the v
21580 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74  alue MEM_Blob st
21590 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
215a0 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54  .** number P2. T
215b0 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64  he key is stored
215c0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
215d0 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a   The key must.**
215e0 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a   be a MEM_Int..*
215f0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
21600 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
21610 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
21620 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
21630 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
21640 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
21650 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74  wise not).  If t
21660 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  he OPFLAG_LASTRO
21670 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69  WID flag of P5 i
21680 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72  s set,.** then r
21690 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66  owid is stored f
216a0 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65  or subsequent re
216b0 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73  turn by the.** s
216c0 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
216d0 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74  rt_rowid() funct
216e0 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69  ion (otherwise i
216f0 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29  t is unmodified)
21700 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
21710 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
21720 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69  ULT flag of P5 i
21730 73 20 73 65 74 20 61 6e 64 20 69 66 20 74 68 65  s set and if the
21740 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
21750 65 20 6c 61 73 74 20 73 65 65 6b 20 6f 70 65 72  e last seek oper
21760 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69  ation (OP_NotExi
21770 73 74 73 29 20 77 61 73 20 61 20 73 75 63 63 65  sts) was a succe
21780 73 73 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a  ss, then this.**
21790 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20   operation will 
217a0 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66  not attempt to f
217b0 69 6e 64 20 74 68 65 20 61 70 70 72 6f 70 72 69  ind the appropri
217c0 61 74 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64  ate row before d
217d0 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65  oing.** the inse
217e0 72 74 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74  rt but will inst
217f0 65 61 64 20 6f 76 65 72 77 72 69 74 65 20 74 68  ead overwrite th
21800 65 20 72 6f 77 20 74 68 61 74 20 74 68 65 20 63  e row that the c
21810 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72  ursor is.** curr
21820 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
21830 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20  o.  Presumably, 
21840 74 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74  the prior OP_Not
21850 45 78 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a  Exists opcode.**
21860 20 68 61 73 20 61 6c 72 65 61 64 79 20 70 6f 73   has already pos
21870 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73  itioned the curs
21880 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54  or correctly.  T
21890 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69  his is an optimi
218a0 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62  zation.** that b
218b0 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d 61 6e 63  oosts performanc
218c0 65 20 62 79 20 61 76 6f 69 64 69 6e 67 20 72 65  e by avoiding re
218d0 64 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a  dundant seeks..*
218e0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
218f0 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67  AG_ISUPDATE flag
21900 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
21910 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72  is opcode is par
21920 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54  t of an.** UPDAT
21930 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74  E operation.  Ot
21940 68 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20  herwise (if the 
21950 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74  flag is clear) t
21960 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a  hen this opcode.
21970 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  ** is part of an
21980 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f   INSERT operatio
21990 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e  n.  The differen
219a0 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72  ce is only impor
219b0 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75  tant to.** the u
219c0 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a  pdate hook..**.*
219d0 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d  * Parameter P4 m
219e0 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74  ay point to a st
219f0 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
21a00 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20  the table-name, 
21a10 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c  or.** may be NUL
21a20 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20  L. If it is not 
21a30 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75  NULL, then the u
21a40 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28  pdate-hook .** (
21a50 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43  sqlite3.xUpdateC
21a60 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f  allback) is invo
21a70 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  ked following a 
21a80 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72  successful inser
21a90 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e  t..**.** (WARNIN
21aa0 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73  G/TODO: If P1 is
21ab0 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72   a pseudo-cursor
21ac0 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d   and P2 is dynam
21ad0 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  ically.** alloca
21ae0 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73  ted, then owners
21af0 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61  hip of P2 is tra
21b00 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20  nsferred to the 
21b10 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a  pseudo-cursor.**
21b20 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32   and register P2
21b30 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72   becomes ephemer
21b40 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73  al.  If the curs
21b50 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74  or is changed, t
21b60 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72  he.** value of r
21b70 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20  egister P2 will 
21b80 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61  then change.  Ma
21b90 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65  ke sure this doe
21ba0 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61  s not.** cause a
21bb0 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a  ny problems.).**
21bc0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
21bd0 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
21be0 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  on tables.  The 
21bf0 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72  equivalent instr
21c00 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e  uction.** for in
21c10 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49  dices is OP_IdxI
21c20 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  nsert..*/./* Opc
21c30 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50  ode: InsertInt P
21c40 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
21c50 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b   Synopsis:  intk
21c60 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d  ey=P3 data=r[P2]
21c70 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
21c80 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f  s exactly like O
21c90 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20  P_Insert except 
21ca0 74 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20  that the key is 
21cb0 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76  the.** integer v
21cc0 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65  alue P3, not the
21cd0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e   value of the in
21ce0 74 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20  teger stored in 
21cf0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
21d00 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20  case OP_Insert: 
21d10 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49  .case OP_InsertI
21d20 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61  nt: {.  Mem *pDa
21d30 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  ta;       /* MEM
21d40 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61   cell holding da
21d50 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ta for the recor
21d60 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
21d70 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b   */.  Mem *pKey;
21d80 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63          /* MEM c
21d90 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20  ell holding key 
21da0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
21db0 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20  */.  i64 iKey;  
21dc0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e         /* The in
21dd0 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b  teger ROWID or k
21de0 65 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ey for the recor
21df0 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
21e00 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
21e10 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f   *pC;   /* Curso
21e20 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20  r to table into 
21e30 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20  which insert is 
21e40 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
21e50 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f   nZero;        /
21e60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
21e70 2d 62 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64  -bytes to append
21e80 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65   */.  int seekRe
21e90 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c  sult;   /* Resul
21ea0 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20  t of prior seek 
21eb0 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45  or 0 if no USESE
21ec0 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f  EKRESULT flag */
21ed0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
21ee0 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65  Db;  /* database
21ef0 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20   name - used by 
21f00 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  the update hook 
21f10 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
21f20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20  *zTbl; /* Table 
21f30 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74  name - used by t
21f40 68 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he opdate hook *
21f50 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20  /.  int op;     
21f60 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20        /* Opcode 
21f70 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a  for update hook:
21f80 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f   SQLITE_UPDATE o
21f90 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20  r SQLITE_INSERT 
21fa0 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61  */..  pData = &a
21fb0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
21fc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
21fd0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
21fe0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
21ff0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
22000 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20  (pData) );.  pC 
22010 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
22020 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
22030 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
22040 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
22050 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
22060 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
22070 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
22080 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
22090 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
220a0 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29  (pOp->p2, pData)
220b0 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ;..  if( pOp->op
220c0 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20  code==OP_Insert 
220d0 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61  ){.    pKey = &a
220e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
220f0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e    assert( pKey->
22100 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
22110 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
22120 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20  emIsValid(pKey) 
22130 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
22140 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
22150 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  Key);.    iKey =
22160 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65   pKey->u.i;.  }e
22170 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
22180 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
22190 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20  _InsertInt );.  
221a0 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33    iKey = pOp->p3
221b0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70  ;.  }..  if( pOp
221c0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
221d0 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
221e0 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ge++;.  if( pOp-
221f0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53  >p5 & OPFLAG_LAS
22200 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73  TROWID ) db->las
22210 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
22220 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28  id = iKey;.  if(
22230 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
22240 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
22250 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20  pData->z = 0;.  
22260 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a    pData->n = 0;.
22270 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
22280 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67  ert( pData->flag
22290 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
222a0 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20  M_Str) );.  }.  
222b0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70  seekResult = ((p
222c0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
222d0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
222e0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
222f0 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74  : 0);.  if( pDat
22300 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  a->flags & MEM_Z
22310 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f  ero ){.    nZero
22320 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72   = pData->u.nZer
22330 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  o;.  }else{.    
22340 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20  nZero = 0;.  }. 
22350 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
22360 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75  eeInsert(pC->pCu
22370 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20  rsor, 0, iKey,. 
22380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22390 20 20 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e           pData->
223a0 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65  z, pData->n, nZe
223b0 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ro,.            
223c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70                (p
223d0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
223e0 41 50 50 45 4e 44 29 21 3d 30 2c 20 73 65 65 6b  APPEND)!=0, seek
223f0 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43  Result.  );.  pC
22400 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
22410 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72   0;.  pC->deferr
22420 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
22430 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
22440 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
22450 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
22460 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
22470 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
22480 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
22490 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
224a0 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
224b0 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d  4.z ){.    zDb =
224c0 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
224d0 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62  ].zName;.    zTb
224e0 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  l = pOp->p4.z;. 
224f0 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70     op = ((pOp->p
22500 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  5 & OPFLAG_ISUPD
22510 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50  ATE) ? SQLITE_UP
22520 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e  DATE : SQLITE_IN
22530 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72  SERT);.    asser
22540 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
22550 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  ;.    db->xUpdat
22560 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
22570 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44  pdateArg, op, zD
22580 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
22590 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
225a0 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
225b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
225c0 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50  ode: Delete P1 P
225d0 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 * P4 *.**.** D
225e0 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64  elete the record
225f0 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31   at which the P1
22600 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65   cursor is curre
22610 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  ntly pointing..*
22620 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  *.** The cursor 
22630 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69  will be left poi
22640 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65 72 20  nting at either 
22650 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
22660 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f  previous.** reco
22670 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
22680 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70   If it is left p
22690 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e  ointing at the n
226a0 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ext record, then
226b0 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78  .** the next Nex
226c0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
226d0 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20  ll be a no-op.  
226e0 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74  Hence it is OK t
226f0 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65  o delete.** a re
22700 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  cord from within
22710 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a   an Next loop..*
22720 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
22730 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
22740 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20 74 68  of P2 is set, th
22750 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
22760 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
22770 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
22780 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a  wise not)..**.**
22790 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P1 must not be 
227a0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
227b0 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65  t has to be a re
227c0 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a  al table with.**
227d0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a   multiple rows..
227e0 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
227f0 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74  ot NULL, then it
22800 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
22810 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 50  the table that P
22820 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67  1 is.** pointing
22830 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65   to.  The update
22840 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e   hook will be in
22850 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69  voked, if it exi
22860 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73  sts..** If P4 is
22870 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74   not NULL then t
22880 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
22890 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69  t have been posi
228a0 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20  tioned.** using 
228b0 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f  OP_NotFound prio
228c0 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68  r to invoking th
228d0 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  is opcode..*/.ca
228e0 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a  se OP_Delete: {.
228f0 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20 56 64    i64 iKey;.  Vd
22900 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
22910 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22920 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
22930 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
22940 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
22950 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
22960 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
22970 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
22980 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76  =0 );  /* Only v
22990 61 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61  alid for real ta
229a0 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74  bles, no pseudot
229b0 61 62 6c 65 73 20 2a 2f 0a 20 20 69 4b 65 79 20  ables */.  iKey 
229c0 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = pC->lastRowid;
229d0 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 75 73        /* Only us
229e0 65 64 20 66 6f 72 20 74 68 65 20 75 70 64 61 74  ed for the updat
229f0 65 20 68 6f 6f 6b 20 2a 2f 0a 0a 20 20 2f 2a 20  e hook */..  /* 
22a00 54 68 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f 70  The OP_Delete op
22a10 63 6f 64 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c  code always foll
22a20 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78 69  ows an OP_NotExi
22a30 73 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20 6f  sts or OP_Last o
22a40 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  r.  ** OP_Column
22a50 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62   on the same tab
22a60 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20 69  le without any i
22a70 6e 74 65 72 76 65 6e 69 6e 67 20 6f 70 65 72 61  ntervening opera
22a80 74 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a 20  tions that.  ** 
22a90 6d 69 67 68 74 20 6d 6f 76 65 20 6f 72 20 69 6e  might move or in
22aa0 76 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72  validate the cur
22ab0 73 6f 72 2e 20 20 48 65 6e 63 65 20 63 75 72 73  sor.  Hence curs
22ac0 6f 72 20 70 43 20 69 73 20 61 6c 77 61 79 73 20  or pC is always 
22ad0 70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74 6f  pointing.  ** to
22ae0 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 64   the row to be d
22af0 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73  eleted and the s
22b00 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
22b10 4d 6f 76 65 74 6f 28 29 20 6f 70 65 72 61 74 69  Moveto() operati
22b20 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69 73  on.  ** below is
22b30 20 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70 20   always a no-op 
22b40 61 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e  and cannot fail.
22b50 20 20 57 65 20 77 69 6c 6c 20 72 75 6e 20 69 74    We will run it
22b60 20 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68 2c   anyhow, though,
22b70 0a 20 20 2a 2a 20 74 6f 20 67 75 61 72 64 20 61  .  ** to guard a
22b80 67 61 69 6e 73 74 20 66 75 74 75 72 65 20 63 68  gainst future ch
22b90 61 6e 67 65 73 20 74 6f 20 74 68 65 20 63 6f 64  anges to the cod
22ba0 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20 2a  e generator..  *
22bb0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  */.  assert( pC-
22bc0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
22bd0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
22be0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
22bf0 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
22c00 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
22c10 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  _OK) ) goto abor
22c20 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
22c30 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
22c40 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70  treeDelete(pC->p
22c50 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63  Cursor);.  pC->c
22c60 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
22c70 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
22c80 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
22c90 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
22ca0 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
22cb0 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
22cc0 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
22cd0 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 26  k && pOp->p4.z &
22ce0 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  & pC->isTable ){
22cf0 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
22d00 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
22d10 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
22d20 44 45 4c 45 54 45 2c 0a 20 20 20 20 20 20 20 20  DELETE,.        
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d40 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d  db->aDb[pC->iDb]
22d50 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d 3e 70 34 2e  .zName, pOp->p4.
22d60 7a 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  z, iKey);.    as
22d70 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
22d80 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   );.  }.  if( pO
22d90 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p2 & OPFLAG_N
22da0 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
22db0 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  nge++;.  break;.
22dc0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  }./* Opcode: Res
22dd0 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20  etCount * * * * 
22de0 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  *.**.** The valu
22df0 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20  e of the change 
22e00 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65  counter is copie
22e10 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
22e20 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e  e handle.** chan
22e30 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75  ge counter (retu
22e40 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65  rned by subseque
22e50 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69  nt calls to sqli
22e60 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a  te3_changes())..
22e70 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20  ** Then the VMs 
22e80 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20  internal change 
22e90 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74  counter resets t
22ea0 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  o 0..** This is 
22eb0 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
22ec0 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73  programs..*/.cas
22ed0 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a  e OP_ResetCount:
22ee0 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   {.  sqlite3Vdbe
22ef0 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
22f00 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d  ->nChange);.  p-
22f10 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  >nChange = 0;.  
22f20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
22f30 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61  ode: SorterCompa
22f40 72 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a  re P1 P2 P3 P4.*
22f50 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20  * Synopsis:  if 
22f60 6b 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b  key(P1)!=trim(r[
22f70 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a  P3],P4) goto P2.
22f80 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f  **.** P1 is a so
22f90 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69  rter cursor. Thi
22fa0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
22fb0 6d 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20  mpares a prefix 
22fc0 6f 66 20 74 68 65 0a 2a 2a 20 74 68 65 20 72 65  of the.** the re
22fd0 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67  cord blob in reg
22fe0 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73 74  ister P3 against
22ff0 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
23000 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
23010 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f  the sorter curso
23020 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  r currently poin
23030 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65  ts to.  Only the
23040 20 66 69 72 73 74 20 50 34 20 66 69 65 6c 64 73   first P4 fields
23050 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64  .** of r[P3] and
23060 20 74 68 65 20 73 6f 72 74 65 72 20 72 65 63 6f   the sorter reco
23070 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  rd are compared.
23080 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
23090 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65   P3 or the sorte
230a0 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c  r contains a NUL
230b0 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69  L in one of thei
230c0 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a  r significant.**
230d0 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75   fields (not cou
230e0 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69 65  nting the P4 fie
230f0 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20 77  lds at the end w
23100 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64  hich are ignored
23110 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f  ) then.** the co
23120 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75  mparison is assu
23130 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e  med to be equal.
23140 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f  .**.** Fall thro
23150 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74  ugh to next inst
23160 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74  ruction if the t
23170 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61  wo records compa
23180 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65  re equal to.** e
23190 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70  ach other.  Jump
231a0 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20 61   to P2 if they a
231b0 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f  re different..*/
231c0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43  .case OP_SorterC
231d0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65  ompare: {.  Vdbe
231e0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
231f0 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65  t res;.  int nKe
23200 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d  yCol;..  pC = p-
23210 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
23220 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
23230 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73  ter(pC) );.  ass
23240 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
23250 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
23260 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
23270 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c  ->p3];.  nKeyCol
23280 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
23290 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
232a0 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43  SorterCompare(pC
232b0 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c  , pIn3, nKeyCol,
232c0 20 26 72 65 73 29 3b 0a 20 20 56 64 62 65 42 72   &res);.  VdbeBr
232d0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
232e0 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
232f0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
23300 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61  p2-1;.  }.  brea
23310 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.};../* Opcode
23320 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31 20  : SorterData P1 
23330 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
23340 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61  psis: r[P2]=data
23350 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
23360 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
23370 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72  e current sorter
23380 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72   data for sorter
23390 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
233a0 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74  ase OP_SorterDat
233b0 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  a: {.  VdbeCurso
233c0 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d  r *pC;..  pOut =
233d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
233e0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
233f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
23400 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
23410 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
23420 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77  te3VdbeSorterRow
23430 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20  key(pC, pOut);. 
23440 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c   assert( rc!=SQL
23450 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d  ITE_OK || (pOut-
23460 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
23470 62 29 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  b) );.  break;.}
23480 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
23490 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a  Data P1 P2 * * *
234a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
234b0 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57  P2]=data.**.** W
234c0 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
234d0 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
234e0 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20  te row data for 
234f0 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
23500 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
23510 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
23520 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73  data.  .** It is
23530 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74   just copied ont
23540 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  o the P2 registe
23550 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
23560 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
23570 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
23580 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
23590 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
235a0 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
235b0 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
235c0 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
235d0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
235e0 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
235f0 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  e..*/./* Opcode:
23600 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20   RowKey P1 P2 * 
23610 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
23620 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a   r[P2]=key.**.**
23630 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
23640 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
23650 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72  lete row key for
23660 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
23670 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72  here is no inter
23680 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
23690 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20   data.  .** The 
236a0 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e  key is copied on
236b0 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74  to the P2 regist
236c0 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a  er exactly as .*
236d0 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e  * it is found in
236e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
236f0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
23700 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
23710 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
23720 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
23730 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
23740 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
23750 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
23760 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  le..*/.case OP_R
23770 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52  owKey:.case OP_R
23780 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  owData: {.  Vdbe
23790 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
237a0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
237b0 20 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36   u32 n;.  i64 n6
237c0 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  4;..  pOut = &aM
237d0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d  em[pOp->p2];.  m
237e0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
237f0 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20  p, pOut);..  /* 
23800 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79  Note that RowKey
23810 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65   and RowData are
23820 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20   really exactly 
23830 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63  the same instruc
23840 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  tion */.  assert
23850 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
23860 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
23870 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
23880 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23890 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
238a0 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61  er(pC)==0 );.  a
238b0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
238c0 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  le || pOp->opcod
238d0 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b  e!=OP_RowData );
238e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
238f0 73 54 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70  sTable==0 || pOp
23900 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77  ->opcode==OP_Row
23910 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74  Data );.  assert
23920 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
23930 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  ert( pC->nullRow
23940 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
23950 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
23960 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
23970 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
23980 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
23990 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
239a0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
239b0 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
239c0 28 70 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a  (pCrsr) );..  /*
239d0 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61   The OP_RowKey a
239e0 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70  nd OP_RowData op
239f0 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c  codes always fol
23a00 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  low OP_NotExists
23a10 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69   or.  ** OP_Rewi
23a20 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20  nd/Op_Next with 
23a30 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69  no intervening i
23a40 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74  nstructions that
23a50 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74   might invalidat
23a60 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f  e.  ** the curso
23a70 72 2e 20 20 48 65 6e 63 65 20 74 68 65 20 66 6f  r.  Hence the fo
23a80 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56  llowing sqlite3V
23a90 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
23aa0 29 20 63 61 6c 6c 20 69 73 20 61 6c 77 61 79 73  ) call is always
23ab0 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e  .  ** a no-op an
23ac0 64 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c  d can never fail
23ad0 2e 20 20 42 75 74 20 77 65 20 6c 65 61 76 65 20  .  But we leave 
23ae0 69 74 20 69 6e 20 70 6c 61 63 65 20 61 73 20 61  it in place as a
23af0 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20   safety..  */.  
23b00 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
23b10 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
23b20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
23b30 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
23b40 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  pC);.  if( NEVER
23b50 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
23b60 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
23b70 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66  _to_error;..  if
23b80 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
23b90 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
23ba0 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a  !pC->isTable );.
23bb0 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
23bc0 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b  =) sqlite3BtreeK
23bd0 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e  eySize(pCrsr, &n
23be0 36 34 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  64);.    assert(
23bf0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
23c00 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63  ;    /* True bec
23c10 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f  ause of CursorMo
23c20 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76  veto() call abov
23c30 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34  e */.    if( n64
23c40 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
23c50 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
23c60 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
23c70 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
23c80 20 20 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a    n = (u32)n64;.
23c90 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 56 41    }else{.    VVA
23ca0 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
23cb0 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65  te3BtreeDataSize
23cc0 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20  (pCrsr, &n);.   
23cd0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
23ce0 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20  ITE_OK );    /* 
23cf0 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f  DataSize() canno
23d00 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66  t fail */.    if
23d10 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69  ( n>(u32)db->aLi
23d20 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
23d30 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
23d40 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
23d50 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
23d60 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
23d70 6f 77 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29  ow(pOut, n, 0) )
23d80 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
23d90 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e  m;.  }.  pOut->n
23da0 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79   = n;.  MemSetTy
23db0 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
23dc0 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43  _Blob);.  if( pC
23dd0 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a  ->isTable==0 ){.
23de0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
23df0 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20  BtreeKey(pCrsr, 
23e00 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a  0, n, pOut->z);.
23e10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
23e20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  = sqlite3BtreeDa
23e30 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ta(pCrsr, 0, n, 
23e40 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20  pOut->z);.  }.  
23e50 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
23e60 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
23e70 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
23e80 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74 65   ever cast to te
23e90 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d  xt */.  UPDATE_M
23ea0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
23eb0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
23ec0 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
23ed0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
23ee0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64  /* Opcode: Rowid
23ef0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
23f00 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
23f10 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  rowid.**.** Stor
23f20 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
23f30 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
23f40 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
23f50 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
23f60 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
23f70 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
23f80 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
23f90 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
23fa0 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
23fb0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
23fc0 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
23fd0 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
23fe0 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
23ff0 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
24000 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
24010 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
24020 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
24030 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
24040 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
24050 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
24060 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
24070 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
24080 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
24090 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
240a0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
240b0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
240c0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
240d0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
240e0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
240f0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
24100 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24110 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24120 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
24130 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
24140 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20  oTableReg==0 || 
24150 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20  pC->nullRow );. 
24160 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
24170 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
24180 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
24190 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c      break;.  }el
241a0 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72  se if( pC->defer
241b0 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20  redMoveto ){.   
241c0 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   v = pC->movetoT
241d0 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53  arget;.#ifndef S
241e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
241f0 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20  ALTABLE.  }else 
24200 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72  if( pC->pVtabCur
24210 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62  sor ){.    pVtab
24220 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73   = pC->pVtabCurs
24230 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70  or->pVtab;.    p
24240 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
24250 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73  pModule;.    ass
24260 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ert( pModule->xR
24270 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d  owid );.    rc =
24280 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
24290 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  (pC->pVtabCursor
242a0 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  , &v);.    sqlit
242b0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
242c0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 23 65  sg(p, pVtab);.#e
242d0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
242e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
242f0 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
24300 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
24310 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72  rsor!=0 );.    r
24320 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
24330 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
24340 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
24350 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
24360 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70  error;.    if( p
24370 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
24380 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 70 43 2d  ){.      v = pC-
24390 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20  >lastRowid;.    
243a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
243b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
243c0 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
243d0 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 61 73  r, &v);.      as
243e0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
243f0 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79  _OK );  /* Alway
24400 73 20 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20  s so because of 
24410 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61  CursorMoveto() a
24420 62 6f 76 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  bove */.    }.  
24430 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
24440 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
24450 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f  * Opcode: NullRo
24460 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  w P1 * * * *.**.
24470 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73  ** Move the curs
24480 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20  or P1 to a null 
24490 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c  row.  Any OP_Col
244a0 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a  umn operations.*
244b0 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69  * that occur whi
244c0 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  le the cursor is
244d0 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77   on the null row
244e0 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20   will always.** 
244f0 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f  write a NULL..*/
24500 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77  .case OP_NullRow
24510 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
24520 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
24530 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
24540 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
24550 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
24560 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
24570 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
24580 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
24590 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 1;.  pC->rowid
245a0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
245b0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
245c0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
245d0 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20  if( pC->pCursor 
245e0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  ){.    sqlite3Bt
245f0 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70  reeClearCursor(p
24600 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d  C->pCursor);.  }
24610 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
24620 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20  Opcode: Last P1 
24630 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
24640 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
24650 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
24660 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72  mn or Prev instr
24670 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
24680 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
24690 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
246a0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
246b0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
246c0 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
246d0 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
246e0 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20   and P2>0, then 
246f0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
24700 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32   to P2..** If P2
24710 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20   is 0 or if the 
24720 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
24730 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
24740 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
24750 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
24760 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
24770 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
24780 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
24790 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
247a0 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
247b0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
247c0 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
247d0 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
247e0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
247f0 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
24800 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
24810 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f  ev, not Next..*/
24820 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b  .case OP_Last: {
24830 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
24840 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
24850 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
24860 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
24870 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
24880 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
24890 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
248a0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
248b0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
248c0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
248d0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
248e0 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b  rsor;.  res = 0;
248f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
24900 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  !=0 );.  rc = sq
24910 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
24920 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70  Crsr, &res);.  p
24930 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
24940 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65  )res;.  pC->defe
24950 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
24960 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
24970 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  id = 0;.  pC->ca
24980 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
24990 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20  E_STALE;.#ifdef 
249a0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
249b0 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c  C->seekOp = OP_L
249c0 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ast;.#endif.  if
249d0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20  ( pOp->p2>0 ){. 
249e0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
249f0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
24a00 20 20 69 66 28 20 72 65 73 20 29 20 70 63 20 3d    if( res ) pc =
24a10 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
24a20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
24a30 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
24a40 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
24a50 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
24a60 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
24a70 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
24a80 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
24a90 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
24aa0 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
24ab0 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
24ac0 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
24ad0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
24ae0 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
24af0 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
24b00 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
24b10 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
24b20 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
24b30 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
24b40 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
24b50 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
24b60 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
24b70 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
24b80 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
24b90 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
24ba0 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
24bb0 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
24bc0 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
24bd0 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
24be0 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
24bf0 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
24c00 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
24c10 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
24c20 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
24c30 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
24c40 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
24c50 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20  P_SorterSort:   
24c60 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
24c70 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
24c80 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
24c90 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
24ca0 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
24cb0 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
24cc0 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
24cd0 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61  -;.#endif.  p->a
24ce0 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
24cf0 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b  TMTSTATUS_SORT]+
24d00 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
24d10 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
24d20 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
24d30 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
24d40 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
24d50 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
24d60 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
24d70 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
24d80 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
24d90 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
24da0 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
24db0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
24dc0 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
24dd0 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
24de0 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
24df0 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a  and P2>0, then j
24e00 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
24e10 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20  to P2..** If P2 
24e20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74  is 0 or if the t
24e30 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
24e40 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
24e50 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
24e60 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
24e70 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
24e80 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
24e90 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
24ea0 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
24eb0 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
24ec0 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
24ed0 65 67 69 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  egining toward t
24ee0 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
24ef0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
24f00 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
24f10 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
24f20 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63  , not Prev..*/.c
24f30 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b  ase OP_Rewind: {
24f40 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
24f50 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
24f60 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
24f70 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
24f80 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
24f90 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
24fa0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
24fb0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
24fc0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
24fd0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
24fe0 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
24ff0 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63  r(pC)==(pOp->opc
25000 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f  ode==OP_SorterSo
25010 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31  rt) );.  res = 1
25020 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
25030 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
25040 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a  Op = OP_Rewind;.
25050 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53  #endif.  if( isS
25060 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20  orter(pC) ){.   
25070 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
25080 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28 64 62  eSorterRewind(db
25090 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d  , pC, &res);.  }
250a0 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73 72 20  else{.    pCrsr 
250b0 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
250c0 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72     assert( pCrsr
250d0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
250e0 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70  ite3BtreeFirst(p
250f0 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  Crsr, &res);.   
25100 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
25110 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
25120 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
25130 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
25140 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
25150 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e   = 0;.  }.  pC->
25160 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
25170 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  s;.  assert( pOp
25180 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
25190 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64  2<p->nOp );.  Vd
251a0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
251b0 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
251c0 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
251d0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
251e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
251f0 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50  pcode: Next P1 P
25200 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
25210 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20   Advance cursor 
25220 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
25230 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74  ints to the next
25240 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
25250 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
25260 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
25270 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b  re are no more k
25280 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74  ey/value pairs t
25290 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
252a0 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
252b0 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
252c0 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75  .  But if the cu
252d0 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73  rsor advance was
252e0 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
252f0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
25300 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
25310 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73  e Next opcode is
25320 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c   only valid foll
25330 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c  owing an SeekGT,
25340 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f   SeekGE, or.** O
25350 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64 65 20  P_Rewind opcode 
25360 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e  used to position
25370 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 4e 65   the cursor.  Ne
25380 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  xt is not allowe
25390 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53  d.** to follow S
253a0 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f  eekLT, SeekLE, o
253b0 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a  r OP_Last..**.**
253c0 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
253d0 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
253e0 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
253f0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31  seudo-table.  P1
25400 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65   must have.** be
25410 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20  en opened prior 
25420 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f  to this opcode o
25430 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69  r the program wi
25440 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a  ll segfault..**.
25450 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  ** The P3 value 
25460 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
25470 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74   btree implement
25480 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c  ation. If P3==1,
25490 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50   that.** means P
254a0 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  1 is an SQL inde
254b0 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20  x and that this 
254c0 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c  instruction coul
254d0 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f  d have been.** o
254e0 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69  mitted if that i
254f0 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e  ndex had been un
25500 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75  ique.  P3 is usu
25510 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a  ally 0.  P3 is.*
25520 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20  * always either 
25530 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  0 or 1..**.** P4
25540 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
25550 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
25560 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
25570 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
25580 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
25590 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  t()..**.** If P5
255a0 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
255b0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
255c0 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
255d0 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
255e0 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
255f0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
25600 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
25610 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
25620 50 72 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e  Prev, NextIfOpen
25630 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
25640 65 78 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20  extIfOpen P1 P2 
25650 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
25660 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
25670 20 6a 75 73 74 20 6c 69 6b 65 20 4e 65 78 74 20   just like Next 
25680 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63  except that if c
25690 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a  ursor P1 is not.
256a0 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76  ** open it behav
256b0 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f  es a no-op..*/./
256c0 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50  * Opcode: Prev P
256d0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
256e0 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73  .** Back up curs
256f0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
25700 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70   points to the p
25710 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61  revious key/data
25720 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
25730 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
25740 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
25750 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c  previous key/val
25760 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
25770 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
25780 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
25790 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
257a0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62   if the cursor b
257b0 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73  ackup was succes
257c0 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
257d0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
257e0 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72  .**.**.** The Pr
257f0 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  ev opcode is onl
25800 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e  y valid followin
25810 67 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65  g an SeekLT, See
25820 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61  kLE, or.** OP_La
25830 73 74 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74  st opcode used t
25840 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63  o position the c
25850 75 72 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20  ursor.  Prev is 
25860 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74  not allowed.** t
25870 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c  o follow SeekGT,
25880 20 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52   SeekGE, or OP_R
25890 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ewind..**.** The
258a0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
258b0 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61  be for a real ta
258c0 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
258d0 6f 2d 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20  o-table.  If P1 
258e0 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74  is.** not open t
258f0 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
25900 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a   is undefined..*
25910 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75  *.** The P3 valu
25920 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74  e is a hint to t
25930 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65  he btree impleme
25940 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d  ntation. If P3==
25950 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73  1, that.** means
25960 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e   P1 is an SQL in
25970 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69  dex and that thi
25980 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
25990 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a  uld have been.**
259a0 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74   omitted if that
259b0 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20   index had been 
259c0 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75  unique.  P3 is u
259d0 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73  sually 0.  P3 is
259e0 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65  .** always eithe
259f0 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20  r 0 or 1..**.** 
25a00 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20  P4 is always of 
25a10 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e  type P4_ADVANCE.
25a20 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f   The function po
25a30 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a  inter points to.
25a40 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  ** sqlite3BtreeP
25a50 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a  revious()..**.**
25a60 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69   If P5 is positi
25a70 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20  ve and the jump 
25a80 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65  is taken, then e
25a90 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20  vent counter.** 
25aa0 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74  number P5-1 in t
25ab0 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
25ac0 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  ement is increme
25ad0 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  nted..*/./* Opco
25ae0 64 65 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50  de: PrevIfOpen P
25af0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
25b00 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
25b10 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
25b20 50 72 65 76 20 65 78 63 65 70 74 20 74 68 61 74  Prev except that
25b30 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73   if cursor P1 is
25b40 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20   not.** open it 
25b50 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e  behaves a no-op.
25b60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
25b70 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75  erNext: {  /* ju
25b80 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
25b90 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
25ba0 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  s;..  pC = p->ap
25bb0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
25bc0 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
25bd0 28 70 43 29 20 29 3b 0a 20 20 72 65 73 20 3d 20  (pC) );.  res = 
25be0 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
25bf0 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28  3VdbeSorterNext(
25c00 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20  db, pC, &res);. 
25c10 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b   goto next_tail;
25c20 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 49 66 4f  .case OP_PrevIfO
25c30 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20  pen:    /* jump 
25c40 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 49  */.case OP_NextI
25c50 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d  fOpen:    /* jum
25c60 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70  p */.  if( p->ap
25c70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20  Csr[pOp->p1]==0 
25c80 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61  ) break;.  /* Fa
25c90 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61  ll through */.ca
25ca0 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20  se OP_Prev:     
25cb0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
25cc0 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20  case OP_Next:   
25cd0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
25ce0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
25cf0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
25d00 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
25d10 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25d20 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61  5<ArraySize(p->a
25d30 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43  Counter) );.  pC
25d40 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
25d50 3e 70 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70 4f  >p1];.  res = pO
25d60 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
25d70 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
25d80 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
25d90 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61  Moveto==0 );.  a
25da0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
25db0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
25dc0 72 65 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d 3d  res==0 || (res==
25dd0 31 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65  1 && pC->isTable
25de0 3d 3d 30 29 20 29 3b 0a 20 20 74 65 73 74 63 61  ==0) );.  testca
25df0 73 65 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20 20  se( res==1 );.  
25e00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
25e10 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20  ode!=OP_Next || 
25e20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
25e30 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  ==sqlite3BtreeNe
25e40 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  xt );.  assert( 
25e50 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
25e60 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Prev || pOp->p4.
25e70 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
25e80 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 20 29  3BtreePrevious )
25e90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
25ea0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74  >opcode!=OP_Next
25eb0 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70  IfOpen || pOp->p
25ec0 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
25ed0 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a  te3BtreeNext );.
25ee0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
25ef0 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66  pcode!=OP_PrevIf
25f00 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Open || pOp->p4.
25f10 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
25f20 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 29 3b  3BtreePrevious);
25f30 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65 78 74 20  ..  /* The Next 
25f40 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75  opcode is only u
25f50 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 47 54  sed after SeekGT
25f60 2c 20 53 65 65 6b 47 45 2c 20 61 6e 64 20 52 65  , SeekGE, and Re
25f70 77 69 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50  wind..  ** The P
25f80 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  rev opcode is on
25f90 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65  ly used after Se
25fa0 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e  ekLT, SeekLE, an
25fb0 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73  d Last. */.  ass
25fc0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
25fd0 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70  !=OP_Next || pOp
25fe0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
25ff0 74 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c  tIfOpen.       |
26000 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
26010 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73  _SeekGT || pC->s
26020 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45  eekOp==OP_SeekGE
26030 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
26040 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64  eekOp==OP_Rewind
26050 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
26060 4f 50 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73  OP_Found);.  ass
26070 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
26080 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70  !=OP_Prev || pOp
26090 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
260a0 76 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c  vIfOpen.       |
260b0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
260c0 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73  _SeekLT || pC->s
260d0 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45  eekOp==OP_SeekLE
260e0 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
260f0 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29  eekOp==OP_Last )
26100 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70  ;..  rc = pOp->p
26110 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 70  4.xAdvance(pC->p
26120 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 6e  Cursor, &res);.n
26130 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e  ext_tail:.  pC->
26140 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
26150 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62  CHE_STALE;.  Vdb
26160 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
26170 3d 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  ==0,2);.  if( re
26180 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e  s==0 ){.    pC->
26190 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
261a0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
261b0 31 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74  1;.    p->aCount
261c0 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23  er[pOp->p5]++;.#
261d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
261e0 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65  T.    sqlite3_se
261f0 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
26200 6e 64 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ndif.  }else{.  
26210 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
26220 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77  1;.  }.  pC->row
26230 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
26240 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
26250 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a  interrupt;.}../*
26260 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
26270 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  rt P1 P2 P3 * P5
26280 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
26290 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65  y=r[P2].**.** Re
262a0 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20  gister P2 holds 
262b0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79  an SQL index key
262c0 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a   made using the.
262d0 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  ** MakeRecord in
262e0 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69  structions.  Thi
262f0 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20  s opcode writes 
26300 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f  that key.** into
26310 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20   the index P1.  
26320 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74  Data for the ent
26330 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a  ry is nil..**.**
26340 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74 68   P3 is a flag th
26350 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68 69  at provides a hi
26360 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65  nt to the b-tree
26370 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69 73   layer that this
26380 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69  .** insert is li
26390 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
263a0 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  pend..**.** If P
263b0 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47  5 has the OPFLAG
263c0 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65 74  _NCHANGE bit set
263d0 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67  , then the chang
263e0 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20  e counter is.** 
263f0 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
26400 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
26410 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
26420 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73 20 63  NCHANGE bit is c
26430 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  lear,.** then th
26440 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
26450 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
26460 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
26470 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
26480 4b 52 45 53 55 4c 54 20 62 69 74 20 73 65 74 2c  KRESULT bit set,
26490 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   then the cursor
264a0 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75   must have.** ju
264b0 73 74 20 64 6f 6e 65 20 61 20 73 65 65 6b 20 74  st done a seek t
264c0 6f 20 74 68 65 20 73 70 6f 74 20 77 68 65 72 65  o the spot where
264d0 20 74 68 65 20 6e 65 77 20 65 6e 74 72 79 20 69   the new entry i
264e0 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  s to be inserted
264f0 2e 0a 2a 2a 20 54 68 69 73 20 66 6c 61 67 20 61  ..** This flag a
26500 76 6f 69 64 73 20 64 6f 69 6e 67 20 61 6e 20 65  voids doing an e
26510 78 74 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a  xtra seek..**.**
26520 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
26530 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  n only works for
26540 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65   indices.  The e
26550 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
26560 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62  ction.** for tab
26570 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74  les is OP_Insert
26580 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
26590 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20  terInsert:      
265a0 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20   /* in2 */.case 
265b0 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20  OP_IdxInsert: { 
265c0 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
265d0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
265e0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
265f0 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79  Crsr;.  int nKey
26600 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
26610 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74 28  zKey;..  assert(
26620 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
26630 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
26640 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
26650 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
26660 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
26670 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
26680 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e  rter(pC)==(pOp->
26690 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
266a0 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49  rInsert) );.  pI
266b0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
266c0 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
266d0 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
266e0 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72  _Blob );.  pCrsr
266f0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
26700 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
26710 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
26720 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
26730 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
26740 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
26750 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
26760 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
26770 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  ob(pIn2);.  if( 
26780 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
26790 0a 20 20 20 20 69 66 28 20 69 73 53 6f 72 74 65  .    if( isSorte
267a0 72 28 70 43 29 20 29 7b 0a 20 20 20 20 20 20 72  r(pC) ){.      r
267b0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
267c0 6f 72 74 65 72 57 72 69 74 65 28 64 62 2c 20 70  orterWrite(db, p
267d0 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d 65  C, pIn2);.    }e
267e0 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4b 65 79 20  lse{.      nKey 
267f0 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20  = pIn2->n;.     
26800 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b   zKey = pIn2->z;
26810 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
26820 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
26830 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79  Crsr, zKey, nKey
26840 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d  , "", 0, 0, pOp-
26850 3e 70 33 2c 20 0a 20 20 20 20 20 20 20 20 20 20  >p3, .          
26860 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
26870 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
26880 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
26890 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20  lt : 0).        
268a0 20 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72    );.      asser
268b0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
268c0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
268d0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
268e0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
268f0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
26900 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26910 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20 50  : IdxDelete P1 P
26920 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
26930 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50  psis: key=r[P2@P
26940 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e  3].**.** The con
26950 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73  tent of P3 regis
26960 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 61 74  ters starting at
26970 20 72 65 67 69 73 74 65 72 20 50 32 20 66 6f 72   register P2 for
26980 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64  m.** an unpacked
26990 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73   index key. This
269a0 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20   opcode removes 
269b0 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20  that entry from 
269c0 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70  the .** index op
269d0 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50  ened by cursor P
269e0 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  1..*/.case OP_Id
269f0 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62  xDelete: {.  Vdb
26a00 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
26a10 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
26a20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
26a30 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a  ackedRecord r;..
26a40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26a50 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  3>0 );.  assert(
26a60 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
26a70 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28  p->p2+pOp->p3<=(
26a80 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
26a90 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72  or)+1 );.  asser
26aa0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
26ab0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
26ac0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
26ad0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
26ae0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
26af0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
26b00 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  ->pCursor;.  ass
26b10 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
26b20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26b30 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65  p5==0 );.  r.pKe
26b40 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
26b50 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64  Info;.  r.nField
26b60 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b   = (u16)pOp->p3;
26b70 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20  .  r.default_rc 
26b80 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  = 0;.  r.aMem = 
26b90 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
26ba0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
26bb0 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66  BUG.  { int i; f
26bc0 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
26bd0 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
26be0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
26bf0 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
26c00 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  dif.  rc = sqlit
26c10 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
26c20 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c  acked(pCrsr, &r,
26c30 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
26c40 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
26c50 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K && res==0 ){. 
26c60 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
26c70 74 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72  treeDelete(pCrsr
26c80 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  );.  }.  assert(
26c90 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
26ca0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e  eto==0 );.  pC->
26cb0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
26cc0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65  CHE_STALE;.  bre
26cd0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26ce0 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32  : IdxRowid P1 P2
26cf0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
26d00 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
26d10 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
26d20 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
26d30 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
26d40 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
26d50 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  in the record at
26d60 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74  .** the end of t
26d70 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69  he index key poi
26d80 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f  nted to by curso
26d90 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65  r P1.  This inte
26da0 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  ger should be.**
26db0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
26dc0 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f  e table entry to
26dd0 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65   which this inde
26de0 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a  x entry points..
26df0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
26e00 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72  Rowid, MakeRecor
26e10 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  d..*/.case OP_Id
26e20 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  xRowid: {       
26e30 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
26e40 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42  rerelease */.  B
26e50 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
26e60 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
26e70 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a  ;.  i64 rowid;..
26e80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26e90 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
26ea0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
26eb0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
26ec0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
26ed0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
26ee0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
26ef0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
26f00 72 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  r!=0 );.  pOut->
26f10 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
26f20 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
26f30 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
26f40 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  (pC);.  if( NEVE
26f50 52 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62 6f  R(rc) ) goto abo
26f60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
26f70 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
26f80 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
26f90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
26fa0 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
26fb0 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52    if( !pC->nullR
26fc0 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20  ow ){.    rowid 
26fd0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
26fe0 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
26ff0 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
27000 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20  ning. */.    rc 
27010 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
27020 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73 72 2c  Rowid(db, pCrsr,
27030 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66   &rowid);.    if
27040 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
27050 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
27060 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
27070 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
27080 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20  ->u.i = rowid;. 
27090 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
270a0 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20   MEM_Int;.  }.  
270b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
270c0 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32  ode: IdxGE P1 P2
270d0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
270e0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
270f0 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
27100 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
27110 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
27120 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
27130 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
27140 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
27150 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
27160 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
27170 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
27180 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
27190 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
271a0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
271b0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
271c0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
271d0 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
271e0 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
271f0 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
27200 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
27210 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
27220 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
27230 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
27240 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
27250 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
27260 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
27270 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
27280 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20 50  IdxGT P1 P2 P3 P
27290 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
272a0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
272b0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
272c0 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
272d0 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
272e0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
272f0 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
27300 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
27310 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
27320 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
27330 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
27340 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
27350 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
27360 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
27370 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
27380 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
27390 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
273a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
273b0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
273c0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
273d0 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
273e0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
273f0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
27400 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
27410 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
27420 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
27430 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  dxLT P1 P2 P3 P4
27440 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
27450 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
27460 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
27470 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
27480 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
27490 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
274a0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
274b0 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
274c0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
274d0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
274e0 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
274f0 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
27500 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
27510 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
27520 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
27530 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
27540 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
27550 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
27560 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
27570 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
27580 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
27590 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
275a0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
275b0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
275c0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
275d0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
275e0 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  dxLE P1 P2 P3 P4
275f0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
27600 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
27610 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
27620 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
27630 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
27640 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
27650 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
27660 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
27670 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
27680 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
27690 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
276a0 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
276b0 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
276c0 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
276d0 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
276e0 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
276f0 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
27700 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
27710 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
27720 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  y is less than o
27730 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
27740 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
27750 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68  mp.** to P2. Oth
27760 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
27770 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
27780 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
27790 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20  case OP_IdxLE:  
277a0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
277b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54  */.case OP_IdxGT
277c0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
277d0 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
277e0 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLT:          /*
277f0 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
27800 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20  _IdxGE:  {      
27810 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
27820 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
27830 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
27840 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
27850 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
27860 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
27870 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
27880 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
27890 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
278a0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
278b0 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
278c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
278d0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20  ->pCursor!=0);. 
278e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
278f0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
27900 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
27910 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
27920 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74  5==1 );.  assert
27930 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
27940 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70  4_INT32 );.  r.p
27950 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
27960 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65  eyInfo;.  r.nFie
27970 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
27980 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  4.i;.  if( pOp->
27990 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20  opcode<OP_IdxLT 
279a0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
279b0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
279c0 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
279d0 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
279e0 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  .    r.default_r
279f0 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b  c = -1;.  }else{
27a00 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
27a10 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
27a20 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  GE || pOp->opcod
27a30 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20  e==OP_IdxLT );. 
27a40 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
27a50 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65  = 0;.  }.  r.aMe
27a60 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
27a70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  3];.#ifdef SQLIT
27a80 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20  E_DEBUG.  { int 
27a90 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
27aa0 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
27ab0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
27ac0 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
27ad0 0a 23 65 6e 64 69 66 0a 20 20 72 65 73 20 3d 20  .#endif.  res = 
27ae0 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
27af0 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
27b00 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
27b10 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ng. */.  rc = sq
27b20 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43  lite3VdbeIdxKeyC
27b30 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26  ompare(pC, &r, &
27b40 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
27b50 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f  (OP_IdxLE&1)==(O
27b60 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f  P_IdxLT&1) && (O
27b70 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxGE&1)==(OP_
27b80 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66  IdxGT&1) );.  if
27b90 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31  ( (pOp->opcode&1
27ba0 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
27bb0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
27bc0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
27bd0 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
27be0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b  ode==OP_IdxLT );
27bf0 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b  .    res = -res;
27c00 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
27c10 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
27c20 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
27c30 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
27c40 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b  dxGT );.    res+
27c50 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  +;.  }.  VdbeBra
27c60 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32  nchTaken(res>0,2
27c70 29 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29  );.  if( res>0 )
27c80 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
27c90 70 32 20 2d 20 31 20 3b 0a 20 20 7d 0a 20 20 62  p2 - 1 ;.  }.  b
27ca0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
27cb0 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50  de: Destroy P1 P
27cc0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 P3 * *.**.** D
27cd0 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20  elete an entire 
27ce0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
27cf0 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
27d00 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64  ot page in the d
27d10 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20  atabase.** file 
27d20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a  is given by P1..
27d30 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
27d40 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20  being destroyed 
27d50 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
27d60 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
27d70 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33  P3==0.  If.** P3
27d80 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
27d90 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
27da0 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
27db0 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
27dc0 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
27dd0 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
27de0 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
27df0 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
27e00 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41  ABLE..**.** If A
27e10 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61  UTOVACUUM is ena
27e20 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20  bled then it is 
27e30 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e  possible that an
27e40 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a  other root page.
27e50 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65  ** might be move
27e60 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79  d into the newly
27e70 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61   deleted root pa
27e80 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ge in order to k
27e90 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20  eep all.** root 
27ea0 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73  pages contiguous
27eb0 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
27ec0 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  g of the databas
27ed0 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a  e.  The former.*
27ee0 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  * value of the r
27ef0 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f  oot page that mo
27f00 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20  ved - its value 
27f10 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20  before the move 
27f20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73  occurred -.** is
27f30 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
27f40 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70  ter P2.  If no p
27f50 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74  age .** movement
27f60 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62   was required (b
27f70 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
27f80 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77   being dropped w
27f90 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74  as already .** t
27fa0 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74  he last one in t
27fb0 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65  he database) the
27fc0 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  n a zero is stor
27fd0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
27fe0 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  2..** If AUTOVAC
27ff0 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20  UUM is disabled 
28000 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73  then a zero is s
28010 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
28020 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
28030 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63  also: Clear.*/.c
28040 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20  ase OP_Destroy: 
28050 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72  {     /* out2-pr
28060 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
28070 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20  t iMoved;.  int 
28080 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70 56  iCnt;.  Vdbe *pV
28090 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  dbe;.  int iDb;.
280a0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
280b0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 23 69 66  adOnly==0 );.#if
280c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
280d0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
280e0 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28  iCnt = 0;.  for(
280f0 70 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b  pVdbe=db->pVdbe;
28100 20 70 56 64 62 65 3b 20 70 56 64 62 65 20 3d 20   pVdbe; pVdbe = 
28110 70 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20  pVdbe->pNext){. 
28120 20 20 20 69 66 28 20 70 56 64 62 65 2d 3e 6d 61     if( pVdbe->ma
28130 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f  gic==VDBE_MAGIC_
28140 52 55 4e 20 26 26 20 70 56 64 62 65 2d 3e 62 49  RUN && pVdbe->bI
28150 73 52 65 61 64 65 72 20 0a 20 20 20 20 20 26 26  sReader .     &&
28160 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65   pVdbe->inVtabMe
28170 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d  thod<2 && pVdbe-
28180 3e 70 63 3e 3d 30 20 0a 20 20 20 20 29 7b 0a 20  >pc>=0 .    ){. 
28190 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20       iCnt++;.   
281a0 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69   }.  }.#else.  i
281b0 43 6e 74 20 3d 20 64 62 2d 3e 6e 56 64 62 65 52  Cnt = db->nVdbeR
281c0 65 61 64 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f  ead;.#endif.  pO
281d0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
281e0 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74  Null;.  if( iCnt
281f0 3e 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  >1 ){.    rc = S
28200 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20  QLITE_LOCKED;.  
28210 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
28220 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d   = OE_Abort;.  }
28230 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20  else{.    iDb = 
28240 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73  pOp->p3;.    ass
28250 65 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a  ert( iCnt==1 );.
28260 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61      assert( DbMa
28270 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
28280 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 20  ask, iDb) );.   
28290 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a   iMoved = 0;  /*
282a0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
282b0 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ly to silence a 
282c0 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
282d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
282e0 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61  eDropTable(db->a
282f0 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70  Db[iDb].pBt, pOp
28300 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a  ->p1, &iMoved);.
28310 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
28320 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
28330 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65  Out->u.i = iMove
28340 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  d;.#ifndef SQLIT
28350 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
28360 4d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  M.    if( rc==SQ
28370 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65  LITE_OK && iMove
28380 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  d!=0 ){.      sq
28390 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
283a0 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76  ed(db, iDb, iMov
283b0 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  ed, pOp->p1);.  
283c0 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65      /* All OP_De
283d0 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
283e0 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61   occur on the sa
283f0 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20  me btree */.    
28400 20 20 61 73 73 65 72 74 28 20 72 65 73 65 74 53    assert( resetS
28410 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20  chemaOnFault==0 
28420 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  || resetSchemaOn
28430 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a  Fault==iDb+1 );.
28440 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d        resetSchem
28450 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31  aOnFault = iDb+1
28460 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
28470 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
28480 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20  * Opcode: Clear 
28490 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44  P1 P2 P3.**.** D
284a0 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
284b0 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ts of the databa
284c0 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
284d0 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
284e0 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61  e.** in the data
284f0 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76  base file is giv
28500 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20  en by P1.  But, 
28510 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20  unlike Destroy, 
28520 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65  do not.** remove
28530 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
28540 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74  dex from the dat
28550 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
28560 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
28570 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  g clear is in th
28580 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
28590 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20  file if P2==0.  
285a0 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e  If.** P2==1 then
285b0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
285c0 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
285d0 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
285e0 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
285f0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
28600 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
28610 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
28620 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
28630 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61  .** If the P3 va
28640 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  lue is non-zero,
28650 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
28660 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74  referred to must
28670 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79   be an.** intkey
28680 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74   table (an SQL t
28690 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64  able, not an ind
286a0 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ex). In this cas
286b0 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  e the row change
286c0 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e   .** count is in
286d0 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
286e0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
286f0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
28700 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20  ng cleared. .** 
28710 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72  If P3 is greater
28720 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e   than zero, then
28730 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
28740 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
28750 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72   is.** also incr
28760 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
28770 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
28780 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
28790 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20   cleared..**.** 
287a0 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f  See also: Destro
287b0 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65  y.*/.case OP_Cle
287c0 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61  ar: {.  int nCha
287d0 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65  nge;. .  nChange
287e0 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
287f0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
28800 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
28810 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
28820 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b  ask, pOp->p2) );
28830 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
28840 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a  treeClearTable(.
28850 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f        db->aDb[pO
28860 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d  p->p2].pBt, pOp-
28870 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20  >p1, (pOp->p3 ? 
28880 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20  &nChange : 0).  
28890 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  );.  if( pOp->p3
288a0 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
288b0 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  ge += nChange;. 
288c0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30     if( pOp->p3>0
288d0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
288e0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
288f0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
28900 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
28910 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
28920 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
28930 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75   aMem[pOp->p3].u
28940 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  .i += nChange;. 
28950 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
28960 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28970 52 65 73 65 74 53 6f 72 74 65 72 20 50 31 20 2a  ResetSorter P1 *
28980 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c   * * *.**.** Del
28990 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
289a0 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65   from the epheme
289b0 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f 72  ral table or sor
289c0 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f  ter.** that is o
289d0 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50 31  pen on cursor P1
289e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
289f0 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  ode only works f
28a00 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65 64 20  or cursors used 
28a10 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a  for sorting and.
28a20 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f  ** opened with O
28a30 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
28a40 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e  or OP_SorterOpen
28a50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73  ..*/.case OP_Res
28a60 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64  etSorter: {.  Vd
28a70 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a  beCursor *pC;. .
28a80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28a90 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
28aa0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
28ab0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
28ac0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
28ad0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
28ae0 20 70 43 2d 3e 70 53 6f 72 74 65 72 20 29 7b 0a   pC->pSorter ){.
28af0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
28b00 6f 72 74 65 72 52 65 73 65 74 28 64 62 2c 20 70  orterReset(db, p
28b10 43 2d 3e 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d  C->pSorter);.  }
28b20 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
28b30 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61  ( pC->isEphemera
28b40 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  l );.    rc = sq
28b50 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
28b60 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43 2d  ableOfCursor(pC-
28b70 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  >pCursor);.  }. 
28b80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
28b90 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c  code: CreateTabl
28ba0 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
28bb0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
28bc0 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a  =root iDb=P1.**.
28bd0 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
28be0 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d  w table in the m
28bf0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
28c00 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
28c10 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
28c20 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
28c30 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
28c40 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
28c50 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
28c60 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
28c70 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
28c80 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
28c90 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
28ca0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65  .**.** The diffe
28cb0 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20  rence between a 
28cc0 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64  table and an ind
28cd0 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20 74  ex is this:  A t
28ce0 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76  able must.** hav
28cf0 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67  e a 4-byte integ
28d00 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68  er key and can h
28d10 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64 61  ave arbitrary da
28d20 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a  ta.  An index.**
28d30 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61 72   has an arbitrar
28d40 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74  y key but no dat
28d50 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  a..**.** See als
28d60 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a  o: CreateIndex.*
28d70 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  /./* Opcode: Cre
28d80 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a  ateIndex P1 P2 *
28d90 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
28da0 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62  : r[P2]=root iDb
28db0 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  =P1.**.** Alloca
28dc0 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69  te a new index i
28dd0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
28de0 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
28df0 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
28e00 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
28e10 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
28e20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
28e30 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
28e40 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
28e50 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
28e60 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
28e70 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
28e80 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  ster P2..**.** S
28e90 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
28ea0 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62   on OP_CreateTab
28eb0 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
28ec0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
28ed0 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65  /.case OP_Create
28ee0 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20 20  Index:          
28ef0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
28f00 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  ease */.case OP_
28f10 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20  CreateTable: {  
28f20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
28f30 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
28f40 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20  int pgno;.  int 
28f50 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62  flags;.  Db *pDb
28f60 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20  ;..  pgno = 0;. 
28f70 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
28f80 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
28f90 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
28fa0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
28fb0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
28fc0 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
28fd0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
28fe0 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
28ff0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
29000 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
29010 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  Bt!=0 );.  if( p
29020 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  Op->opcode==OP_C
29030 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20  reateTable ){.  
29040 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52    /* flags = BTR
29050 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20  EE_INTKEY; */.  
29060 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f    flags = BTREE_
29070 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b  INTKEY;.  }else{
29080 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52  .    flags = BTR
29090 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a  EE_BLOBKEY;.  }.
290a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
290b0 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
290c0 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Db->pBt, &pgno, 
290d0 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e  flags);.  pOut->
290e0 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72  u.i = pgno;.  br
290f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
29100 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50  e: ParseSchema P
29110 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
29120 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
29130 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
29140 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
29150 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61  ER table of data
29160 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20  base P1.** that 
29170 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20  match the WHERE 
29180 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a  clause P4. .**.*
29190 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
291a0 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72  vokes the parser
291b0 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77   to create a new
291c0 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
291d0 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74  ,.** then runs t
291e0 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d  he new virtual m
291f0 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74  achine.  It is t
29200 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74  hus a re-entrant
29210 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
29220 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a   OP_ParseSchema:
29230 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20   {.  int iDb;.  
29240 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73  const char *zMas
29250 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71  ter;.  char *zSq
29260 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e  l;.  InitData in
29270 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e  itData;..  /* An
29280 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  y prepared state
29290 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65  ment that invoke
292a0 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  s this opcode wi
292b0 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a  ll hold mutexes.
292c0 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74    ** on every bt
292d0 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20  ree.  This is a 
292e0 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72  prerequisite for
292f0 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20   invoking .  ** 
29300 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
29310 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64  ack()..  */.#ifd
29320 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
29330 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62    for(iDb=0; iDb
29340 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29  <db->nDb; iDb++)
29350 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  {.    assert( iD
29360 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42  b==1 || sqlite3B
29370 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64  treeHoldsMutex(d
29380 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29  b->aDb[iDb].pBt)
29390 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
293a0 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
293b0 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
293c0 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
293d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
293e0 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
293f0 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
29400 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73  aded) );.  /* Us
29410 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69  ed to be a condi
29420 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20  tional */ {.    
29430 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41  zMaster = SCHEMA
29440 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20  _TABLE(iDb);.   
29450 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64   initData.db = d
29460 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  b;.    initData.
29470 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
29480 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72     initData.pzEr
29490 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d  rMsg = &p->zErrM
294a0 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73  sg;.    zSql = s
294b0 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
294c0 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
294d0 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c   name, rootpage,
294e0 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25   sql FROM '%q'.%
294f0 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52  s WHERE %s ORDER
29500 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20   BY rowid",.    
29510 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e     db->aDb[iDb].
29520 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20  zName, zMaster, 
29530 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
29540 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
29550 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
29560 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73  _NOMEM;.    }els
29570 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
29580 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d   db->init.busy==
29590 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  0 );.      db->i
295a0 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20  nit.busy = 1;.  
295b0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20      initData.rc 
295c0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
295d0 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e     assert( !db->
295e0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
295f0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
29600 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
29610 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
29620 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
29630 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
29640 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc==SQLITE_OK ) 
29650 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63  rc = initData.rc
29660 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  ;.      sqlite3D
29670 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b  bFree(db, zSql);
29680 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
29690 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  busy = 0;.    }.
296a0 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73    }.  if( rc ) s
296b0 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
296c0 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
296d0 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d  n(db);.  if( rc=
296e0 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
296f0 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
29700 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20  ;.  }.  break;  
29710 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
29720 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
29730 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  LYZE)./* Opcode:
29740 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31   LoadAnalysis P1
29750 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52   * * * *.**.** R
29760 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ead the sqlite_s
29770 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64  tat1 table for d
29780 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c  atabase P1 and l
29790 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a  oad the content.
297a0 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
297b0 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e   into the intern
297c0 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61  al index hash ta
297d0 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ble.  This will 
297e0 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61  cause.** the ana
297f0 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64  lysis to be used
29800 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20   when preparing 
29810 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71  all subsequent q
29820 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  ueries..*/.case 
29830 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a  OP_LoadAnalysis:
29840 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
29850 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
29860 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
29870 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c  rc = sqlite3Anal
29880 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70  ysisLoad(db, pOp
29890 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20  ->p1);.  break; 
298a0 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64   .}.#endif /* !d
298b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
298c0 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a  IT_ANALYZE) */..
298d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
298e0 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  able P1 * * P4 *
298f0 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
29900 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
29910 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
29920 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
29930 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c  ribe.** the tabl
29940 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  e named P4 in da
29950 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
29960 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
29970 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64   a table.** is d
29980 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b  ropped from disk
29990 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74   (using the Dest
299a0 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f  roy opcode) in o
299b0 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a  rder to keep .**
299c0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
299d0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
299e0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
299f0 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
29a00 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
29a10 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61  /.case OP_DropTa
29a20 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ble: {.  sqlite3
29a30 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
29a40 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  able(db, pOp->p1
29a50 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
29a60 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
29a70 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50  ode: DropIndex P
29a80 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
29a90 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
29aa0 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
29ab0 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
29ac0 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
29ad0 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65  * the index name
29ae0 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
29af0 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
29b00 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e  lled after an in
29b10 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  dex.** is droppe
29b20 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
29b30 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
29b40 70 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64  pcode).** in ord
29b50 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
29b60 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
29b70 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
29b80 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
29b90 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
29ba0 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
29bb0 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b   OP_DropIndex: {
29bc0 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
29bd0 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64  AndDeleteIndex(d
29be0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
29bf0 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
29c00 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
29c10 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20  ropTrigger P1 * 
29c20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
29c30 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
29c40 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
29c50 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
29c60 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
29c70 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20  e trigger named 
29c80 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
29c90 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
29ca0 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67  ed after a trigg
29cb0 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  er.** is dropped
29cc0 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
29cd0 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
29ce0 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74  code) in order t
29cf0 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69  o keep .** the i
29d00 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
29d10 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
29d20 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
29d30 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
29d40 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
29d50 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a   OP_DropTrigger:
29d60 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
29d70 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
29d80 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  er(db, pOp->p1, 
29d90 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
29da0 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
29db0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
29dc0 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20  EGRITY_CHECK./* 
29dd0 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74  Opcode: Integrit
29de0 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50  yCk P1 P2 P3 * P
29df0 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e  5.**.** Do an an
29e00 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75  alysis of the cu
29e10 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74  rrently open dat
29e20 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e  abase.  Store in
29e30 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
29e40 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65  the text of an e
29e50 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73  rror message des
29e60 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62  cribing any prob
29e70 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70  lems..** If no p
29e80 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e  roblems are foun
29e90 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  d, store a NULL 
29ea0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
29eb0 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
29ec0 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
29ed0 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
29ee0 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72  r of allowed err
29ef0 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20  ors..** At most 
29f00 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77  reg(P3) errors w
29f10 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e  ill be reported.
29f20 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
29f30 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73  ds, the analysis
29f40 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61   stops as soon a
29f50 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73  s reg(P1) errors
29f60 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20   are .** seen.  
29f70 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74  Reg(P1) is updat
29f80 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62  ed with the numb
29f90 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  er of errors rem
29fa0 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  aining..**.** Th
29fb0 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
29fc0 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65  ers of all table
29fd0 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
29fe0 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a  e are integer.**
29ff0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50   stored in reg(P
2a000 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72  1), reg(P1+1), r
2a010 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20  eg(P1+2), ....  
2a020 54 68 65 72 65 20 61 72 65 20 50 32 20 74 61 62  There are P2 tab
2a030 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a  les.** total..**
2a040 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
2a050 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b   zero, the check
2a060 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20   is done on the 
2a070 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2a080 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20  se.** file, not 
2a090 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2a0a0 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
2a0b0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
2a0c0 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
2a0d0 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  he integrity_che
2a0e0 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61  ck pragma..*/.ca
2a0f0 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43  se OP_IntegrityC
2a100 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74  k: {.  int nRoot
2a110 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
2a120 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68   of tables to ch
2a130 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66  eck.  (Number of
2a140 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f   root pages.) */
2a150 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20  .  int *aRoot;  
2a160 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72     /* Array of r
2a170 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ootpage numbers 
2a180 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65  for tables to be
2a190 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e   checked */.  in
2a1a0 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  t j;          /*
2a1b0 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
2a1c0 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
2a1d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
2a1e0 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20  errors reported 
2a1f0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20  */.  char *z;   
2a200 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
2a210 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74  the error report
2a220 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72   */.  Mem *pnErr
2a230 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  ;     /* Registe
2a240 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20  r keeping track 
2a250 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
2a260 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  ing */..  assert
2a270 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
2a280 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d  ;.  nRoot = pOp-
2a290 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
2a2a0 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f  Root>0 );.  aRoo
2a2b0 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  t = sqlite3DbMal
2a2c0 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f  locRaw(db, sizeo
2a2d0 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29  f(int)*(nRoot+1)
2a2e0 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d   );.  if( aRoot=
2a2f0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2a300 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2a310 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
2a320 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
2a330 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72  ursor) );.  pnEr
2a340 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  r = &aMem[pOp->p
2a350 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
2a360 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  nErr->flags & ME
2a370 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61  M_Int)!=0 );.  a
2a380 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
2a390 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
2a3a0 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
2a3b0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2a3c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
2a3d0 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b  j=0; j<nRoot; j+
2a3e0 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d  +){.    aRoot[j]
2a3f0 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56   = (int)sqlite3V
2a400 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e  dbeIntValue(&pIn
2a410 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f  1[j]);.  }.  aRo
2a420 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73  ot[j] = 0;.  ass
2a430 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d  ert( pOp->p5<db-
2a440 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2a450 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
2a460 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
2a470 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c  p5) );.  z = sql
2a480 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69  ite3BtreeIntegri
2a490 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b  tyCheck(db->aDb[
2a4a0 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52  pOp->p5].pBt, aR
2a4b0 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20  oot, nRoot,.    
2a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
2a4e0 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e  t)pnErr->u.i, &n
2a4f0 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  Err);.  sqlite3D
2a500 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29  bFree(db, aRoot)
2a510 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d  ;.  pnErr->u.i -
2a520 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65  = nErr;.  sqlite
2a530 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
2a540 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72  pIn1);.  if( nEr
2a550 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  r==0 ){.    asse
2a560 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65  rt( z==0 );.  }e
2a570 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a  lse if( z==0 ){.
2a580 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
2a590 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
2a5a0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
2a5b0 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20  tr(pIn1, z, -1, 
2a5c0 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c  SQLITE_UTF8, sql
2a5d0 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a  ite3_free);.  }.
2a5e0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
2a5f0 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73  BSIZE(pIn1);.  s
2a600 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2a610 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65  Encoding(pIn1, e
2a620 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
2a630 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2a640 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
2a650 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f  RITY_CHECK */../
2a660 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
2a670 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Add P1 P2 * * *.
2a680 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f  ** Synopsis:  ro
2a690 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a  wset(P1)=r[P2].*
2a6a0 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20  *.** Insert the 
2a6b0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65  integer value he
2a6c0 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50  ld by register P
2a6d0 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e  2 into a boolean
2a6e0 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69   index.** held i
2a6f0 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
2a700 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f  *.** An assertio
2a710 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73  n fails if P2 is
2a720 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e   not an integer.
2a730 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
2a740 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f  etAdd: {       /
2a750 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20  * in1, in2 */.  
2a760 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2a770 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
2a780 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2a790 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
2a7a0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
2a7b0 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  )!=0 );.  if( (p
2a7c0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2a7d0 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
2a7e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2a7f0 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
2a800 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
2a810 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2a820 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
2a830 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c  o_mem;.  }.  sql
2a840 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
2a850 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2a860 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn2->u.i);.  
2a870 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2a880 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20  ode: RowSetRead 
2a890 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
2a8a0 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
2a8b0 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a  =rowset(P1).**.*
2a8c0 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d  * Extract the sm
2a8d0 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f  allest value fro
2a8e0 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  m boolean index 
2a8f0 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74 20  P1 and put that 
2a900 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  value into.** re
2a910 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20  gister P3.  Or, 
2a920 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  if boolean index
2a930 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79   P1 is initially
2a940 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33   empty, leave P3
2a950 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e  .** unchanged an
2a960 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  d jump to instru
2a970 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ction P2..*/.cas
2a980 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a  e OP_RowSetRead:
2a990 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
2a9a0 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in1, out3 */. 
2a9b0 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e   i64 val;..  pIn
2a9c0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2a9d0 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
2a9e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2a9f0 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73  Set)==0 .   || s
2aa00 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
2aa10 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2aa20 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a  , &val)==0.  ){.
2aa30 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65      /* The boole
2aa40 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  an index is empt
2aa50 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  y */.    sqlite3
2aa60 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
2aa70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70  In1);.    pc = p
2aa80 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2aa90 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2aaa0 31 2c 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  1,2);.  }else{. 
2aab0 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61     /* A value wa
2aac0 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68  s pulled from th
2aad0 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 73  e index */.    s
2aae0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2aaf0 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
2ab00 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 20 20  >p3], val);.    
2ab10 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2ab20 30 2c 32 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  0,2);.  }.  goto
2ab30 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
2ab40 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  rupt;.}../* Opco
2ab50 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50  de: RowSetTest P
2ab60 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79  1 P2 P3 P4.** Sy
2ab70 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d  nopsis: if r[P3]
2ab80 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67   in rowset(P1) g
2ab90 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
2aba0 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75  ister P3 is assu
2abb0 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34  med to hold a 64
2abc0 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
2abd0 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20  ue. If register 
2abe0 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P1.** contains a
2abf0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61   RowSet object a
2ac00 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f  nd that RowSet o
2ac10 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a  bject contains.*
2ac20 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64  * the value held
2ac30 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20   in P3, jump to 
2ac40 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68  register P2. Oth
2ac50 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74  erwise, insert t
2ac60 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e  he.** integer in
2ac70 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77   P3 into the Row
2ac80 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  Set and continue
2ac90 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65   on to the.** ne
2aca0 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  xt opcode..**.**
2acb0 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   The RowSet obje
2acc0 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20  ct is optimized 
2acd0 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65  for the case whe
2ace0 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65  re successive se
2acf0 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72  ts.** of integer
2ad00 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65  s, where each se
2ad10 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75  t contains no du
2ad20 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73  plicates. Each s
2ad30 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20  et.** of values 
2ad40 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
2ad50 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c   a unique P4 val
2ad60 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65  ue. The first se
2ad70 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50  t.** must have P
2ad80 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20  4==0, the final 
2ad90 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d  set P4=-1.  P4 m
2ada0 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31  ust be either -1
2adb0 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74   or.** non-negat
2adc0 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65  ive.  For non-ne
2add0 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66  gative values of
2ade0 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77   P4 only the low
2adf0 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65  er 4.** bits are
2ae00 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a   significant..**
2ae10 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  .** This allows 
2ae20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28  optimizations: (
2ae30 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68  a) when P4==0 th
2ae40 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
2ae50 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f  o test.** the ro
2ae60 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20  wset object for 
2ae70 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61  P3, as it is gua
2ae80 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63  ranteed not to c
2ae90 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62  ontain it,.** (b
2aea0 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68  ) when P4==-1 th
2aeb0 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
2aec0 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c  o insert the val
2aed0 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a  ue, as it will.*
2aee0 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65  * never be teste
2aef0 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77  d for, and (c) w
2af00 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74  hen a value that
2af10 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20   is part of set 
2af20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64  X is.** inserted
2af30 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  , there is no ne
2af40 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20  ed to search to 
2af50 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20  see if the same 
2af60 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65  value was.** pre
2af70 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64  viously inserted
2af80 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20   as part of set 
2af90 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61  X (only if it wa
2afa0 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20  s previously.** 
2afb0 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74  inserted as part
2afc0 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73   of some other s
2afd0 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  et)..*/.case OP_
2afe0 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20  RowSetTest: {   
2aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b000 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20    /* jump, in1, 
2b010 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  in3 */.  int iSe
2b020 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b  t;.  int exists;
2b030 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
2b040 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
2b050 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
2b060 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70  3];.  iSet = pOp
2b070 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74  ->p4.i;.  assert
2b080 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn3->flags&ME
2b090 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  M_Int );..  /* I
2b0a0 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68  f there is anyth
2b0b0 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61  ing other than a
2b0c0 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69   rowset object i
2b0d0 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31  n memory cell P1
2b0e0 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74  ,.  ** delete it
2b0f0 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c   now and initial
2b100 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65  ize P1 with an e
2b110 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f  mpty rowset.  */
2b120 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
2b130 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
2b140 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
2b150 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
2b160 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
2b170 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
2b180 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
2b190 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
2b1a0 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
2b1b0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
2b1c0 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74  NT32 );.  assert
2b1d0 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53  ( iSet==-1 || iS
2b1e0 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69  et>=0 );.  if( i
2b1f0 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74  Set ){.    exist
2b200 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65  s = sqlite3RowSe
2b210 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52  tTest(pIn1->u.pR
2b220 6f 77 53 65 74 2c 20 69 53 65 74 2c 20 70 49 6e  owSet, iSet, pIn
2b230 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62  3->u.i);.    Vdb
2b240 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69  eBranchTaken(exi
2b250 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  sts!=0,2);.    i
2b260 66 28 20 65 78 69 73 74 73 20 29 7b 0a 20 20 20  f( exists ){.   
2b270 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2b280 2d 20 31 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  - 1;.      break
2b290 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
2b2a0 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20  ( iSet>=0 ){.   
2b2b0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
2b2c0 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  sert(pIn1->u.pRo
2b2d0 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29  wSet, pIn3->u.i)
2b2e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2b2f0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
2b300 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a  E_OMIT_TRIGGER..
2b310 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72  /* Opcode: Progr
2b320 61 6d 20 50 31 20 50 32 20 50 33 20 50 34 20 50  am P1 P2 P3 P4 P
2b330 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  5.**.** Execute 
2b340 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
2b350 72 61 6d 20 70 61 73 73 65 64 20 61 73 20 50 34  ram passed as P4
2b360 20 28 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f   (type P4_SUBPRO
2b370 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31  GRAM). .**.** P1
2b380 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
2b390 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d  dress of the mem
2b3a0 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f  ory cell that co
2b3b0 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 74  ntains the first
2b3c0 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
2b3d0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
2b3e0 76 61 6c 75 65 73 20 75 73 65 64 20 61 73 20 61  values used as a
2b3f0 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
2b400 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20  sub-program. P2 
2b410 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  .** contains the
2b420 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70   address to jump
2b430 20 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70   to if the sub-p
2b440 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e  rogram throws an
2b450 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65   IGNORE .** exce
2b460 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20  ption using the 
2b470 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e  RAISE() function
2b480 2e 20 52 65 67 69 73 74 65 72 20 50 33 20 63 6f  . Register P3 co
2b490 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
2b4a0 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f  ss .** of a memo
2b4b0 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20  ry cell in this 
2b4c0 28 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20  (the parent) VM 
2b4d0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
2b4e0 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a  allocate the .**
2b4f0 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
2b500 20 62 79 20 74 68 65 20 73 75 62 2d 76 64 62 65   by the sub-vdbe
2b510 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a   at runtime..**.
2b520 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2b530 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e  er to the VM con
2b540 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
2b550 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a  ger program..**.
2b560 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
2b570 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72  zero, then recur
2b580 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76  sive program inv
2b590 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c  ocation is enabl
2b5a0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  ed..*/.case OP_P
2b5b0 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  rogram: {       
2b5c0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
2b5d0 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
2b5e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2b5f0 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74  of memory regist
2b600 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  ers for sub-prog
2b610 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79  ram */.  int nBy
2b620 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
2b630 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e   /* Bytes of run
2b640 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69  time space requi
2b650 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  red for sub-prog
2b660 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ram */.  Mem *pR
2b670 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2b680 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
2b690 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65  allocate runtime
2b6a0 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20   space */.  Mem 
2b6b0 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
2b6c0 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69      /* Used to i
2b6d0 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d  terate through m
2b6e0 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20  emory cells */. 
2b6f0 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20   Mem *pEnd;     
2b700 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
2b710 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
2b720 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56  new array */.  V
2b730 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
2b740 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64  ;      /* New vd
2b750 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63  be frame to exec
2b760 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50  ute in */.  SubP
2b770 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
2b780 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72  ;   /* Sub-progr
2b790 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f  am to execute */
2b7a0 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20  .  void *t;     
2b7b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
2b7c0 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20  ken identifying 
2b7d0 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50  trigger */..  pP
2b7e0 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34  rogram = pOp->p4
2b7f0 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74  .pProgram;.  pRt
2b800 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2b810 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72  ];.  assert( pPr
2b820 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a  ogram->nOp>0 );.
2b830 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70    .  /* If the p
2b840 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c  5 flag is clear,
2b850 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
2b860 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
2b870 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20  iggers is .  ** 
2b880 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63  disabled for bac
2b890 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69  kwards compatibi
2b8a0 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20  lity (p5 is set 
2b8b0 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67  if this sub-prog
2b8c0 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c  ram.  ** is real
2b8d0 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f  ly a trigger, no
2b8e0 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  t a foreign key 
2b8f0 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20  action, and the 
2b900 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e  flag set.  ** an
2b910 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65  d cleared by the
2b920 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69   "PRAGMA recursi
2b930 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d  ve_triggers" com
2b940 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a  mand is clear)..
2b950 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73    ** .  ** It is
2b960 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
2b970 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
2b980 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65  s, at the SQL le
2b990 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20  vel, that is .  
2b9a0 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20  ** disabled. In 
2b9b0 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e  some cases a sin
2b9c0 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  gle trigger may 
2b9d0 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68  generate more th
2b9e0 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62  an one .  ** Sub
2b9f0 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20  Program (if the 
2ba00 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65  trigger may be e
2ba10 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72  xecuted with mor
2ba20 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65  e than one diffe
2ba30 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f  rent .  ** ON CO
2ba40 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
2ba50 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74  ). SubProgram st
2ba60 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61  ructures associa
2ba70 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20  ted with a.  ** 
2ba80 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61  single trigger a
2ba90 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ll have the same
2baa0 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53   value for the S
2bab0 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20  ubProgram.token 
2bac0 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20  .  ** variable. 
2bad0 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
2bae0 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72  5 ){.    t = pPr
2baf0 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20  ogram->token;.  
2bb00 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
2bb10 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26  pFrame; pFrame &
2bb20 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21  & pFrame->token!
2bb30 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  =t; pFrame=pFram
2bb40 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
2bb50 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72   if( pFrame ) br
2bb60 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
2bb70 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61  p->nFrame>=db->a
2bb80 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
2bb90 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48  IT_TRIGGER_DEPTH
2bba0 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ] ){.    rc = SQ
2bbb0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
2bbc0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2bbd0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2bbe0 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65  , "too many leve
2bbf0 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65  ls of trigger re
2bc00 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62  cursion");.    b
2bc10 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  reak;.  }..  /* 
2bc20 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20  Register pRt is 
2bc30 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
2bc40 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
2bc50 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74  d to save the st
2bc60 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ate.  ** of the 
2bc70 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c  current program,
2bc80 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20   and the memory 
2bc90 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74  required at runt
2bca0 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20  ime to execute. 
2bcb0 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20   ** the trigger 
2bcc0 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73  program. If this
2bcd0 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65   trigger has bee
2bce0 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20  n fired before, 
2bcf0 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69  then pRt .  ** i
2bd00 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  s already alloca
2bd10 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ted. Otherwise, 
2bd20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69  it must be initi
2bd30 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66  alized.  */.  if
2bd40 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45  ( (pRt->flags&ME
2bd50 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20  M_Frame)==0 ){. 
2bd60 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d     /* SubProgram
2bd70 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20  .nMem is set to 
2bd80 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
2bd90 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
2bda0 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70  by the .    ** p
2bdb0 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e  rogram stored in
2bdc0 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e   SubProgram.aOp.
2bdd0 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73   As well as thes
2bde0 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20  e, one memory.  
2bdf0 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71    ** cell is req
2be00 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63  uired for each c
2be10 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68  ursor used by th
2be20 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c  e program. Set l
2be30 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69  ocal.    ** vari
2be40 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c  able nMem (and l
2be50 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e  ater, VdbeFrame.
2be60 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68  nChildMem) to th
2be70 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f  is value..    */
2be80 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f  .    nMem = pPro
2be90 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72  gram->nMem + pPr
2bea0 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
2beb0 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28   nByte = ROUND8(
2bec0 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65  sizeof(VdbeFrame
2bed0 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
2bee0 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66   + nMem * sizeof
2bef0 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20  (Mem).          
2bf00 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
2bf10 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64  nCsr * sizeof(Vd
2bf20 62 65 43 75 72 73 6f 72 20 2a 29 0a 20 20 20 20  beCursor *).    
2bf30 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f            + pPro
2bf40 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69  gram->nOnce * si
2bf50 7a 65 6f 66 28 75 38 29 3b 0a 20 20 20 20 70 46  zeof(u8);.    pF
2bf60 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62  rame = sqlite3Db
2bf70 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e  MallocZero(db, n
2bf80 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21  Byte);.    if( !
2bf90 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20  pFrame ){.      
2bfa0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
2bfb0 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
2bfc0 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74  beMemRelease(pRt
2bfd0 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67  );.    pRt->flag
2bfe0 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20  s = MEM_Frame;. 
2bff0 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65     pRt->u.pFrame
2c000 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20   = pFrame;..    
2c010 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20  pFrame->v = p;. 
2c020 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
2c030 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20  dMem = nMem;.   
2c040 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43   pFrame->nChildC
2c050 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  sr = pProgram->n
2c060 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Csr;.    pFrame-
2c070 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70 46  >pc = pc;.    pF
2c080 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e  rame->aMem = p->
2c090 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  aMem;.    pFrame
2c0a0 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d  ->nMem = p->nMem
2c0b0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70  ;.    pFrame->ap
2c0c0 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a  Csr = p->apCsr;.
2c0d0 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72      pFrame->nCur
2c0e0 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72  sor = p->nCursor
2c0f0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f  ;.    pFrame->aO
2c100 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
2c110 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d  pFrame->nOp = p-
2c120 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65  >nOp;.    pFrame
2c130 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72  ->token = pProgr
2c140 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 70  am->token;.    p
2c150 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61 67  Frame->aOnceFlag
2c160 20 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b   = p->aOnceFlag;
2c170 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e  .    pFrame->nOn
2c180 63 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63  ceFlag = p->nOnc
2c190 65 46 6c 61 67 3b 0a 0a 20 20 20 20 70 45 6e 64  eFlag;..    pEnd
2c1a0 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d   = &VdbeFrameMem
2c1b0 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d  (pFrame)[pFrame-
2c1c0 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20  >nChildMem];.   
2c1d0 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72   for(pMem=VdbeFr
2c1e0 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20  ameMem(pFrame); 
2c1f0 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d  pMem!=pEnd; pMem
2c200 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d  ++){.      pMem-
2c210 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
2c220 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d  efined;.      pM
2c230 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20  em->db = db;.   
2c240 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
2c250 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e  pFrame = pRt->u.
2c260 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65  pFrame;.    asse
2c270 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  rt( pProgram->nM
2c280 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  em+pProgram->nCs
2c290 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
2c2a0 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65  dMem );.    asse
2c2b0 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  rt( pProgram->nC
2c2c0 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
2c2d0 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73  ldCsr );.    ass
2c2e0 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d  ert( pc==pFrame-
2c2f0 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d  >pc );.  }..  p-
2c300 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72  >nFrame++;.  pFr
2c310 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70  ame->pParent = p
2c320 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61  ->pFrame;.  pFra
2c330 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  me->lastRowid = 
2c340 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72  lastRowid;.  pFr
2c350 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70  ame->nChange = p
2c360 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e  ->nChange;.  p->
2c370 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70  nChange = 0;.  p
2c380 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  ->pFrame = pFram
2c390 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61  e;.  p->aMem = a
2c3a0 4d 65 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65  Mem = &VdbeFrame
2c3b0 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b  Mem(pFrame)[-1];
2c3c0 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72  .  p->nMem = pFr
2c3d0 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a  ame->nChildMem;.
2c3e0 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28    p->nCursor = (
2c3f0 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69  u16)pFrame->nChi
2c400 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73  ldCsr;.  p->apCs
2c410 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20  r = (VdbeCursor 
2c420 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  **)&aMem[p->nMem
2c430 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20  +1];.  p->aOp = 
2c440 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  aOp = pProgram->
2c450 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20  aOp;.  p->nOp = 
2c460 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20  pProgram->nOp;. 
2c470 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20   p->aOnceFlag = 
2c480 28 75 38 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b  (u8 *)&p->apCsr[
2c490 70 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70  p->nCursor];.  p
2c4a0 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50  ->nOnceFlag = pP
2c4b0 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20  rogram->nOnce;. 
2c4c0 20 70 63 20 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73   pc = -1;.  mems
2c4d0 65 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c  et(p->aOnceFlag,
2c4e0 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67   0, p->nOnceFlag
2c4f0 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  );..  break;.}..
2c500 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d  /* Opcode: Param
2c510 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2c520 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2c530 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73  s only ever pres
2c540 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72  ent in sub-progr
2c550 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74  ams called via t
2c560 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61  he .** OP_Progra
2c570 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43  m instruction. C
2c580 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72  opy a value curr
2c590 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ently stored in 
2c5a0 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c  a memory .** cel
2c5b0 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  l of the calling
2c5c0 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20   (parent) frame 
2c5d0 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68  to cell P2 in th
2c5e0 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73  e current frames
2c5f0 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61   .** address spa
2c600 63 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ce. This is used
2c610 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
2c620 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74  rams to access t
2c630 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64  he new.* .** and
2c640 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a   old.* values..*
2c650 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73  *.** The address
2c660 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20   of the cell in 
2c670 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
2c680 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
2c690 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20  y adding.** the 
2c6a0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
2c6b0 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
2c6c0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
2c6d0 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a  argument to the.
2c6e0 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  ** calling OP_Pr
2c6f0 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
2c700 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  n..*/.case OP_Pa
2c710 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ram: {          
2c720 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
2c730 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ase */.  VdbeFra
2c740 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65  me *pFrame;.  Me
2c750 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65  m *pIn;.  pFrame
2c760 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
2c770 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  pIn = &pFrame->a
2c780 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46  Mem[pOp->p1 + pF
2c790 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65  rame->aOp[pFrame
2c7a0 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20  ->pc].p1];   .  
2c7b0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
2c7c0 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
2c7d0 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  pIn, MEM_Ephem);
2c7e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e  .  break;.}..#en
2c7f0 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
2c800 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2c810 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  ER */..#ifndef S
2c820 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2c830 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65  GN_KEY./* Opcode
2c840 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50  : FkCounter P1 P
2c850 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2c860 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d  sis: fkctr[P1]+=
2c870 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65  P2.**.** Increme
2c880 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74  nt a "constraint
2c890 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20   counter" by P2 
2c8a0 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74  (P2 may be negat
2c8b0 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
2c8c0 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  ..** If P1 is no
2c8d0 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61  n-zero, the data
2c8e0 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  base constraint 
2c8f0 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
2c900 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65  mented .** (defe
2c910 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79  rred foreign key
2c920 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f   constraints). O
2c930 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20  therwise, if P1 
2c940 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a  is zero, the .**
2c950 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74   statement count
2c960 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
2c970 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  d (immediate for
2c980 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2c990 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ints)..*/.case O
2c9a0 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20  P_FkCounter: {. 
2c9b0 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
2c9c0 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
2c9d0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
2c9e0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20  erredImmCons += 
2c9f0 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
2ca00 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
2ca10 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
2ca20 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  dCons += pOp->p2
2ca30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
2ca40 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20  ->nFkConstraint 
2ca50 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a  += pOp->p2;.  }.
2ca60 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2ca70 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20  pcode: FkIfZero 
2ca80 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2ca90 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63 74  ynopsis: if fkct
2caa0 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32  r[P1]==0 goto P2
2cab0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2cac0 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f  de tests if a fo
2cad0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2cae0 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
2caf0 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a  currently zero..
2cb00 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74  ** If so, jump t
2cb10 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
2cb20 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
2cb30 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2cb40 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75   next .** instru
2cb50 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
2cb60 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
2cb70 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73  then the jump is
2cb80 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61   taken if the da
2cb90 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
2cba0 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20  t-counter.** is 
2cbb0 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68  zero (the one th
2cbc0 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72  at counts deferr
2cbd0 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ed constraint vi
2cbe0 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31  olations). If P1
2cbf0 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65   is.** zero, the
2cc00 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
2cc10 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
2cc20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
2cc30 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69  er is zero.** (i
2cc40 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
2cc50 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
2cc60 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a  violations)..*/.
2cc70 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f  case OP_FkIfZero
2cc80 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  : {         /* j
2cc90 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ump */.  if( pOp
2cca0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62 65  ->p1 ){.    Vdbe
2ccb0 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e  BranchTaken(db->
2ccc0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
2ccd0 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2cce0 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b  dImmCons==0, 2);
2ccf0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65  .    if( db->nDe
2cd00 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26  ferredCons==0 &&
2cd10 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2cd20 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20  mCons==0 ) pc = 
2cd30 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c  pOp->p2-1;.  }el
2cd40 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
2cd50 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f  chTaken(p->nFkCo
2cd60 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64  nstraint==0 && d
2cd70 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
2cd80 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20  ons==0, 2);.    
2cd90 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72  if( p->nFkConstr
2cda0 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  aint==0 && db->n
2cdb0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
2cdc0 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  =0 ) pc = pOp->p
2cdd0 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2-1;.  }.  break
2cde0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  ;.}.#endif /* #i
2cdf0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2ce00 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f  T_FOREIGN_KEY */
2ce10 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ce20 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
2ce30 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  ENT./* Opcode: M
2ce40 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20  emMax P1 P2 * * 
2ce50 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2ce60 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72  [P1]=max(r[P1],r
2ce70 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69  [P2]).**.** P1 i
2ce80 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
2ce90 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
2cea0 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20 72  f this VM (the r
2ceb0 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20  oot frame is.** 
2cec0 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74  different from t
2ced0 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
2cee0 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   if this instruc
2cef0 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78  tion is being ex
2cf00 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e  ecuted.** within
2cf10 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e   a sub-program).
2cf20 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   Set the value o
2cf30 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  f register P1 to
2cf40 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
2cf50 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20  .** its current 
2cf60 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61  value and the va
2cf70 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
2cf80 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
2cf90 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77  nstruction throw
2cfa0 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
2cfb0 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73  e memory cell is
2cfc0 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a   not initially.*
2cfd0 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  * an integer..*/
2cfe0 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a  .case OP_MemMax:
2cff0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32   {        /* in2
2d000 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
2d010 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70  *pFrame;.  if( p
2d020 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
2d030 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
2d040 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
2d050 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
2d060 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
2d070 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61      pIn1 = &pFra
2d080 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
2d090 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
2d0a0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2d0b0 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73  ->p1];.  }.  ass
2d0c0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2d0d0 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74  pIn1) );.  sqlit
2d0e0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
2d0f0 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
2d100 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
2d110 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
2d120 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
2d130 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  In2);.  if( pIn1
2d140 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29  ->u.i<pIn2->u.i)
2d150 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  {.    pIn1->u.i 
2d160 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d  = pIn2->u.i;.  }
2d170 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2d180 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2d190 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  T_AUTOINCREMENT 
2d1a0 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  */../* Opcode: I
2d1b0 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a  fPos P1 P2 * * *
2d1c0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2d1d0 20 72 5b 50 31 5d 3e 30 20 67 6f 74 6f 20 50 32   r[P1]>0 goto P2
2d1e0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
2d1f0 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
2d200 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74  P1 is 1 or great
2d210 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  er, jump to P2..
2d220 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
2d230 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
2d240 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
2d250 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
2d260 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
2d270 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2d280 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
2d290 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
2d2a0 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
2d2b0 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
2d2c0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2d2d0 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2d2e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2d2f0 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2d300 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2d310 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2d320 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20  n( pIn1->u.i>0, 
2d330 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
2d340 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63  u.i>0 ){.     pc
2d350 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2d360 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2d370 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67  /* Opcode: IfNeg
2d380 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2d390 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
2d3a0 31 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  1]<0 goto P2.**.
2d3b0 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
2d3c0 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2d3d0 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f  s less than zero
2d3e0 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  , jump to P2. .*
2d3f0 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
2d400 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69  al to use this i
2d410 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20  nstruction on a 
2d420 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f  register that do
2d430 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
2d440 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
2d450 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
2d460 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
2d470 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
2d480 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20  e OP_IfNeg: {   
2d490 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2d4a0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
2d4b0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2d4c0 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2d4d0 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2d4e0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2d4f0 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29  (pIn1->u.i<0, 2)
2d500 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2d510 69 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  i<0 ){.     pc =
2d520 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2d530 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2d540 20 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20   Opcode: IfZero 
2d550 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
2d560 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 2b  Synopsis: r[P1]+
2d570 3d 50 33 2c 20 69 66 20 72 5b 50 31 5d 3d 3d 30  =P3, if r[P1]==0
2d580 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
2d590 68 65 20 72 65 67 69 73 74 65 72 20 50 31 20 6d  he register P1 m
2d5a0 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ust contain an i
2d5b0 6e 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74  nteger.  Add lit
2d5c0 65 72 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a  eral P3 to the.*
2d5d0 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  * value in regis
2d5e0 74 65 72 20 50 31 2e 20 20 49 66 20 74 68 65 20  ter P1.  If the 
2d5f0 72 65 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c  result is exactl
2d600 79 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  y 0, jump to P2.
2d610 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c   .**.** It is il
2d620 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69  legal to use thi
2d630 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
2d640 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
2d650 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e   does.** not con
2d660 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
2d670 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66    An assertion f
2d680 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74  ault will result
2d690 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a   if you try..*/.
2d6a0 63 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20  case OP_IfZero: 
2d6b0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2d6c0 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
2d6d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2d6e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
2d6f0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2d700 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b  );.  pIn1->u.i +
2d710 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 56 64 62  = pOp->p3;.  Vdb
2d720 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e  eBranchTaken(pIn
2d730 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20  1->u.i==0, 2);. 
2d740 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d   if( pIn1->u.i==
2d750 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
2d760 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2d770 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2d780 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a  pcode: AggStep *
2d790 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
2d7a0 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d  Synopsis: accum=
2d7b0 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40  r[P3] step(r[P2@
2d7c0 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P5]).**.** Execu
2d7d0 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  te the step func
2d7e0 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
2d7f0 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66  egate.  The.** f
2d800 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
2d810 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69  rguments.   P4 i
2d820 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2d830 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74  he FuncDef.** st
2d840 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
2d850 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
2d860 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74  ion.  Use regist
2d870 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20  er.** P3 as the 
2d880 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a  accumulator..**.
2d890 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65  ** The P5 argume
2d8a0 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72  nts are taken fr
2d8b0 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
2d8c0 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73  nd its.** succes
2d8d0 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sors..*/.case OP
2d8e0 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
2d8f0 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  t n;.  int i;.  
2d900 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d  Mem *pMem;.  Mem
2d910 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65   *pRec;.  sqlite
2d920 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20  3_context ctx;. 
2d930 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2d940 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70  *apVal;..  n = p
2d950 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74  Op->p5;.  assert
2d960 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63  ( n>=0 );.  pRec
2d970 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
2d980 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e  ];.  apVal = p->
2d990 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28  apArg;.  assert(
2d9a0 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29   apVal || n==0 )
2d9b0 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ;.  for(i=0; i<n
2d9c0 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a  ; i++, pRec++){.
2d9d0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
2d9e0 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a  sValid(pRec) );.
2d9f0 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70      apVal[i] = p
2da00 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  Rec;.    memAbou
2da10 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 52 65  tToChange(p, pRe
2da20 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46  c);.  }.  ctx.pF
2da30 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46  unc = pOp->p4.pF
2da40 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70  unc;.  assert( p
2da50 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
2da60 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
2da70 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 63  >nCursor) );.  c
2da80 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d  tx.pMem = pMem =
2da90 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2daa0 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20  .  pMem->n++;.  
2dab0 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45  ctx.s.flags = ME
2dac0 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e  M_Null;.  ctx.s.
2dad0 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a  z = 0;.  ctx.s.z
2dae0 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74  Malloc = 0;.  ct
2daf0 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  x.s.xDel = 0;.  
2db00 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20  ctx.s.db = db;. 
2db10 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30   ctx.isError = 0
2db20 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20  ;.  ctx.pColl = 
2db30 30 3b 0a 20 20 63 74 78 2e 73 6b 69 70 46 6c 61  0;.  ctx.skipFla
2db40 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78  g = 0;.  if( ctx
2db50 2e 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67  .pFunc->funcFlag
2db60 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  s & SQLITE_FUNC_
2db70 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20  NEEDCOLL ){.    
2db80 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61  assert( pOp>p->a
2db90 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Op );.    assert
2dba0 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65  ( pOp[-1].p4type
2dbb0 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
2dbc0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
2dbd0 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
2dbe0 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74  ollSeq );.    ct
2dbf0 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31  x.pColl = pOp[-1
2dc00 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a  ].p4.pColl;.  }.
2dc10 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53    (ctx.pFunc->xS
2dc20 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70  tep)(&ctx, n, ap
2dc30 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d  Val); /* IMP: R-
2dc40 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20  24505-23230 */. 
2dc50 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72   if( ctx.isError
2dc60 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
2dc70 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2dc80 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
2dc90 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
2dca0 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20  xt(&ctx.s));.   
2dcb0 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f   rc = ctx.isErro
2dcc0 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 74 78  r;.  }.  if( ctx
2dcd0 2e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20  .skipFlag ){.   
2dce0 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
2dcf0 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c  .opcode==OP_Coll
2dd00 53 65 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70  Seq );.    i = p
2dd10 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69  Op[-1].p1;.    i
2dd20 66 28 20 69 20 29 20 73 71 6c 69 74 65 33 56 64  f( i ) sqlite3Vd
2dd30 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
2dd40 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a  Mem[i], 1);.  }.
2dd50 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2dd60 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29  mRelease(&ctx.s)
2dd70 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ;..  break;.}../
2dd80 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e  * Opcode: AggFin
2dd90 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  al P1 P2 * P4 *.
2dda0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
2ddb0 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a  um=r[P1] N=P2.**
2ddc0 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2ddd0 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69  finalizer functi
2dde0 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
2ddf0 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74  ate.  P1 is.** t
2de00 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
2de10 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 61  on that is the a
2de20 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74  ccumulator for t
2de30 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a  he aggregate..**
2de40 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75  .** P2 is the nu
2de50 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
2de60 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70 20  s that the step 
2de70 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61  function takes a
2de80 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  nd.** P4 is a po
2de90 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e  inter to the Fun
2dea0 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66 75  cDef for this fu
2deb0 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a  nction.  The P2.
2dec0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e  ** argument is n
2ded0 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ot used by this 
2dee0 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f  opcode.  It is o
2def0 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69 73  nly there to dis
2df00 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e  ambiguate.** fun
2df10 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20  ctions that can 
2df20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d  take varying num
2df30 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74  bers of argument
2df40 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72  s.  The.** P4 ar
2df50 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e  gument is only n
2df60 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 64 65  eeded for the de
2df70 67 65 6e 65 72 61 74 65 20 63 61 73 65 20 77 68  generate case wh
2df80 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20  ere.** the step 
2df90 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74  function was not
2dfa0 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c   previously call
2dfb0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ed..*/.case OP_A
2dfc0 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d  ggFinal: {.  Mem
2dfd0 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74   *pMem;.  assert
2dfe0 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
2dff0 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
2e000 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
2e010 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
2e020 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2e030 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
2e040 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d  & ~(MEM_Null|MEM
2e050 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72  _Agg))==0 );.  r
2e060 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
2e070 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c  emFinalize(pMem,
2e080 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b   pOp->p4.pFunc);
2e090 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
2e0a0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2e0b0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2e0c0 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
2e0d0 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d  _value_text(pMem
2e0e0 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ));.  }.  sqlite
2e0f0 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2e100 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69  ing(pMem, encodi
2e110 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
2e120 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29  X_BLOBSIZE(pMem)
2e130 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
2e140 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65  dbeMemTooBig(pMe
2e150 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  m) ){.    goto t
2e160 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
2e170 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
2e180 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2e190 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b  /* Opcode: Check
2e1a0 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a  point P1 P2 P3 *
2e1b0 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f   *.**.** Checkpo
2e1c0 69 6e 74 20 64 61 74 61 62 61 73 65 20 50 31 2e  int database P1.
2e1d0 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70   This is a no-op
2e1e0 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75   if P1 is not cu
2e1f0 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41  rrently in.** WA
2e200 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65  L mode. Paramete
2e210 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53  r P2 is one of S
2e220 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
2e230 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 0a 2a  _PASSIVE, FULL.*
2e240 2a 20 6f 72 20 52 45 53 54 41 52 54 2e 20 20 57  * or RESTART.  W
2e250 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f  rite 1 or 0 into
2e260 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20   mem[P3] if the 
2e270 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72  checkpoint retur
2e280 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53  ns.** SQLITE_BUS
2e290 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63  Y or not, respec
2e2a0 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74  tively.  Write t
2e2b0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
2e2c0 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c  es in the.** WAL
2e2d0 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b   after the check
2e2e0 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50  point into mem[P
2e2f0 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d  3+1] and the num
2e300 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20  ber of pages.** 
2e310 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20  in the WAL that 
2e320 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70  have been checkp
2e330 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65  ointed after the
2e340 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63   checkpoint.** c
2e350 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65  ompletes into me
2e360 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65  m[P3+2].  Howeve
2e370 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d  r on an error, m
2e380 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20  em[P3+1] and.** 
2e390 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e  mem[P3+2] are in
2e3a0 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e  itialized to -1.
2e3b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63  .*/.case OP_Chec
2e3c0 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  kpoint: {.  int 
2e3d0 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
2e3e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
2e3f0 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
2e400 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20   int aRes[3];   
2e410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e420 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20   /* Results */. 
2e430 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
2e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e450 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74   /* Write result
2e460 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73  s here */..  ass
2e470 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2e480 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d  ==0 );.  aRes[0]
2e490 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20   = 0;.  aRes[1] 
2e4a0 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a  = aRes[2] = -1;.
2e4b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2e4c0 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
2e4d0 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20  OINT_PASSIVE.   
2e4e0 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
2e4f0 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
2e500 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c  T_FULL.       ||
2e510 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
2e520 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54  _CHECKPOINT_REST
2e530 41 52 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20  ART.  );.  rc = 
2e540 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
2e550 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  t(db, pOp->p1, p
2e560 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d  Op->p2, &aRes[1]
2e570 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69  , &aRes[2]);.  i
2e580 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
2e590 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  SY ){.    rc = S
2e5a0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52  QLITE_OK;.    aR
2e5b0 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20  es[0] = 1;.  }. 
2e5c0 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d   for(i=0, pMem =
2e5d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2e5e0 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b   i<3; i++, pMem+
2e5f0 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  +){.    sqlite3V
2e600 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
2e610 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69  Mem, (i64)aRes[i
2e620 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72  ]);.  }    .  br
2e630 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66  eak;.};  .#endif
2e640 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2e650 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20  _OMIT_PRAGMA./* 
2e660 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d  Opcode: JournalM
2e670 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ode P1 P2 P3 * *
2e680 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  .**.** Change th
2e690 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
2e6a0 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  f database P1 to
2e6b0 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20   P3. P3 must be 
2e6c0 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41  one of the.** PA
2e6d0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2e6e0 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63  XXX values. If c
2e6f0 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20  hanging between 
2e700 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c  the various roll
2e710 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64  back.** modes (d
2e720 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c  elete, truncate,
2e730 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e   persist, off an
2e740 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20  d memory), this 
2e750 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f  is a simple.** o
2e760 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20  peration. No IO 
2e770 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a  is required..**.
2e780 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69  ** If changing i
2e790 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41  nto or out of WA
2e7a0 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65  L mode the proce
2e7b0 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d  dure is more com
2e7c0 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  plicated..**.** 
2e7d0 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63  Write a string c
2e7e0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69  ontaining the fi
2e7f0 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  nal journal-mode
2e800 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
2e810 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72  .*/.case OP_Jour
2e820 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a  nalMode: {    /*
2e830 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
2e840 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
2e850 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2e860 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74        /* Btree t
2e870 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c  o change journal
2e880 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61   mode of */.  Pa
2e890 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20  ger *pPager;    
2e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2e8b0 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74 65   Pager associate
2e8c0 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20  d with pBt */.  
2e8d0 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20  int eNew;       
2e8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8f0 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d  /* New journal m
2e900 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c  ode */.  int eOl
2e910 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
2e920 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2e930 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  old journal mode
2e940 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
2e950 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f  TE_OMIT_WAL.  co
2e960 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e  nst char *zFilen
2e970 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
2e980 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
2e990 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65  e file for pPage
2e9a0 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 65  r */.#endif..  e
2e9b0 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  New = pOp->p3;. 
2e9c0 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50   assert( eNew==P
2e9d0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2e9e0 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20  _DELETE .       
2e9f0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2ea00 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43  OURNALMODE_TRUNC
2ea10 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  ATE .       || e
2ea20 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2ea30 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a  ALMODE_PERSIST .
2ea40 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2ea50 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2ea60 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20  E_OFF.       || 
2ea70 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2ea80 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20  NALMODE_MEMORY. 
2ea90 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2eaa0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2eab0 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65  _WAL.       || e
2eac0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2ead0 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29  ALMODE_QUERY.  )
2eae0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2eaf0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2eb00 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
2eb10 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2eb20 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20  ly==0 );..  pBt 
2eb30 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
2eb40 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72  1].pBt;.  pPager
2eb50 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
2eb60 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c  ager(pBt);.  eOl
2eb70 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  d = sqlite3Pager
2eb80 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  GetJournalMode(p
2eb90 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e  Pager);.  if( eN
2eba0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2ebb0 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e  LMODE_QUERY ) eN
2ebc0 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28  ew = eOld;.  if(
2ebd0 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b   !sqlite3PagerOk
2ebe0 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d  ToChangeJournalM
2ebf0 6f 64 65 28 70 50 61 67 65 72 29 20 29 20 65 4e  ode(pPager) ) eN
2ec00 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e  ew = eOld;..#ifn
2ec10 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ec20 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20  WAL.  zFilename 
2ec30 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
2ec40 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31  lename(pPager, 1
2ec50 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  );..  /* Do not 
2ec60 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69  allow a transiti
2ec70 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  on to journal_mo
2ec80 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74  de=WAL for a dat
2ec90 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65  abase.  ** in te
2eca0 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20  mporary storage 
2ecb0 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f  or if the VFS do
2ecc0 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73  es not support s
2ecd0 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20  hared memory .  
2ece0 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  */.  if( eNew==P
2ecf0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2ed00 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69  _WAL.   && (sqli
2ed10 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c  te3Strlen30(zFil
2ed20 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20  ename)==0       
2ed30 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65      /* Temp file
2ed40 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73   */.       || !s
2ed50 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75  qlite3PagerWalSu
2ed60 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29  pported(pPager))
2ed70 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d     /* No shared-
2ed80 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a  memory support *
2ed90 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20  /.  ){.    eNew 
2eda0 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69  = eOld;.  }..  i
2edb0 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a  f( (eNew!=eOld).
2edc0 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47     && (eOld==PAG
2edd0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2ede0 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45  AL || eNew==PAGE
2edf0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2ee00 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20  L).  ){.    if( 
2ee10 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  !db->autoCommit 
2ee20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64  || db->nVdbeRead
2ee30 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  >1 ){.      rc =
2ee40 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
2ee50 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
2ee60 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2ee70 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20  g, db, .        
2ee80 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65    "cannot change
2ee90 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f   %s wal mode fro
2eea0 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  m within a trans
2eeb0 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20  action",.       
2eec0 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f     (eNew==PAGER_
2eed0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
2eee0 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20  ? "into" : "out 
2eef0 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20  of").      );.  
2ef00 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
2ef10 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66  else{. .      if
2ef20 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f  ( eOld==PAGER_JO
2ef30 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b  URNALMODE_WAL ){
2ef40 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c  .        /* If l
2ef50 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c  eaving WAL mode,
2ef60 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66   close the log f
2ef70 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66  ile. If successf
2ef80 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20  ul, the call.   
2ef90 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72       ** to Pager
2efa0 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b  CloseWal() check
2efb0 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74  points and delet
2efc0 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65  es the write-ahe
2efd0 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20  ad-log .        
2efe0 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c  ** file. An EXCL
2eff0 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73  USIVE lock may s
2f000 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20  till be held on 
2f010 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2f020 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66  e .        ** af
2f030 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c  ter a successful
2f040 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20   return. .      
2f050 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20    */.        rc 
2f060 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c  = sqlite3PagerCl
2f070 6f 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a  oseWal(pPager);.
2f080 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
2f090 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2f0a0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
2f0b0 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
2f0c0 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b  e(pPager, eNew);
2f0d0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2f0e0 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d   }else if( eOld=
2f0f0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2f100 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20  DE_MEMORY ){.   
2f110 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74       /* Cannot t
2f120 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74  ransition direct
2f130 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74  ly from MEMORY t
2f140 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65  o WAL.  Use mode
2f150 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20   OFF.        ** 
2f160 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61  as an intermedia
2f170 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71  te */.        sq
2f180 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
2f190 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
2f1a0 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
2f1b0 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d  DE_OFF);.      }
2f1c0 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65  .  .      /* Ope
2f1d0 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
2f1e0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
2f1f0 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73  file. Regardless
2f200 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a   of the journal.
2f210 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74        ** mode, t
2f220 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  his transaction 
2f230 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f  always uses a ro
2f240 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a  llback journal..
2f250 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
2f260 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
2f270 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
2f280 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  )==0 );.      if
2f290 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2f2a0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
2f2b0 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56  sqlite3BtreeSetV
2f2c0 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65  ersion(pBt, (eNe
2f2d0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2f2e0 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31  MODE_WAL ? 2 : 1
2f2f0 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ));.      }.    
2f300 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
2f310 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f320 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28  IT_WAL */..  if(
2f330 20 72 63 20 29 7b 0a 20 20 20 20 65 4e 65 77 20   rc ){.    eNew 
2f340 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e  = eOld;.  }.  eN
2f350 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  ew = sqlite3Page
2f360 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
2f370 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a  pPager, eNew);..
2f380 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
2f390 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d  Op->p2];.  pOut-
2f3a0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
2f3b0 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
2f3c0 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20  Term;.  pOut->z 
2f3d0 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65  = (char *)sqlite
2f3e0 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
2f3f0 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e  (eNew);.  pOut->
2f400 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  n = sqlite3Strle
2f410 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20  n30(pOut->z);.  
2f420 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
2f430 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74  TE_UTF8;.  sqlit
2f440 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2f450 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
2f460 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
2f470 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
2f480 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a  TE_OMIT_PRAGMA *
2f490 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  /..#if !defined(
2f4a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55  SQLITE_OMIT_VACU
2f4b0 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  UM) && !defined(
2f4c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41  SQLITE_OMIT_ATTA
2f4d0 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  CH)./* Opcode: V
2f4e0 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a  acuum * * * * *.
2f4f0 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65  **.** Vacuum the
2f500 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
2f510 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
2f520 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20  ill cause other 
2f530 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69  virtual.** machi
2f540 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65  nes to be create
2f550 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d  d and run.  It m
2f560 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64  ay not be called
2f570 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20   from within.** 
2f580 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a  a transaction..*
2f590 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d  /.case OP_Vacuum
2f5a0 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  : {.  assert( p-
2f5b0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2f5c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75    rc = sqlite3Ru
2f5d0 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72  nVacuum(&p->zErr
2f5e0 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61  Msg, db);.  brea
2f5f0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
2f600 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2f610 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
2f620 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63  )./* Opcode: Inc
2f630 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20  rVacuum P1 P2 * 
2f640 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72  * *.**.** Perfor
2f650 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20  m a single step 
2f660 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74  of the increment
2f670 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64  al vacuum proced
2f680 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31  ure on.** the P1
2f690 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68   database. If th
2f6a0 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e  e vacuum has fin
2f6b0 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69  ished, jump to i
2f6c0 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32  nstruction.** P2
2f6d0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
2f6e0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2f6f0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
2f700 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  n..*/.case OP_In
2f710 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20  crVacuum: {     
2f720 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2f730 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61  Btree *pBt;..  a
2f740 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2f750 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
2f760 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2f770 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
2f780 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
2f790 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  p1) );.  assert(
2f7a0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
2f7b0 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
2f7c0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
2f7d0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
2f7e0 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70  treeIncrVacuum(p
2f7f0 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  Bt);.  VdbeBranc
2f800 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54  hTaken(rc==SQLIT
2f810 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28  E_DONE,2);.  if(
2f820 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc==SQLITE_DONE
2f830 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
2f840 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63  ->p2 - 1;.    rc
2f850 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2f860 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2f870 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
2f880 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20  Expire P1 * * * 
2f890 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72  *.**.** Cause pr
2f8a0 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d  ecompiled statem
2f8b0 65 6e 74 73 20 74 6f 20 65 78 70 69 72 65 2e 20  ents to expire. 
2f8c0 20 57 68 65 6e 20 61 6e 20 65 78 70 69 72 65 64   When an expired
2f8d0 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73   statement.** is
2f8e0 20 65 78 65 63 75 74 65 64 20 75 73 69 6e 67 20   executed using 
2f8f0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69  sqlite3_step() i
2f900 74 20 77 69 6c 6c 20 65 69 74 68 65 72 20 61 75  t will either au
2f910 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72  tomatically.** r
2f920 65 70 72 65 70 61 72 65 20 69 74 73 65 6c 66 20  eprepare itself 
2f930 28 69 66 20 69 74 20 77 61 73 20 6f 72 69 67 69  (if it was origi
2f940 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 20 75 73  nally created us
2f950 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ing sqlite3_prep
2f960 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20  are_v2()).** or 
2f970 69 74 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74  it will fail wit
2f980 68 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e  h SQLITE_SCHEMA.
2f990 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73  .** .** If P1 is
2f9a0 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c   0, then all SQL
2f9b0 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f   statements beco
2f9c0 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20 50  me expired. If P
2f9d0 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a  1 is non-zero,.*
2f9e0 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20  * then only the 
2f9f0 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74  currently execut
2fa00 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ing statement is
2fa10 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73   expired..*/.cas
2fa20 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20  e OP_Expire: {. 
2fa30 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b   if( !pOp->p1 ){
2fa40 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
2fa50 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
2fa60 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73  ents(db);.  }els
2fa70 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  e{.    p->expire
2fa80 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 1;.  }.  bre
2fa90 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
2faa0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
2fab0 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64  D_CACHE./* Opcod
2fac0 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20  e: TableLock P1 
2fad0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
2fae0 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72  nopsis: iDb=P1 r
2faf0 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a  oot=P2 write=P3.
2fb00 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c  **.** Obtain a l
2fb10 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75  ock on a particu
2fb20 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20  lar table. This 
2fb30 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f  instruction is o
2fb40 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a  nly used when.**
2fb50 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68   the shared-cach
2fb60 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  e feature is ena
2fb70 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20  bled. .**.** P1 
2fb80 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
2fb90 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20  the database in 
2fba0 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
2fbb0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
2fbc0 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f   on which the lo
2fbd0 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e 20  ck is acquired. 
2fbe0 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f   A readlock is o
2fbf0 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30  btained if P3==0
2fc00 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c   or.** a write l
2fc10 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a  ock if P3==1..**
2fc20 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20  .** P2 contains 
2fc30 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66  the root-page of
2fc40 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f   the table to lo
2fc50 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e  ck..**.** P4 con
2fc60 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20  tains a pointer 
2fc70 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  to the name of t
2fc80 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c  he table being l
2fc90 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f  ocked. This is o
2fca0 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67  nly.** used to g
2fcb0 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72  enerate an error
2fcc0 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65 20   message if the 
2fcd0 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f  lock cannot be o
2fce0 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65  btained..*/.case
2fcf0 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b   OP_TableLock: {
2fd00 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63  .  u8 isWriteLoc
2fd10 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b  k = (u8)pOp->p3;
2fd20 0a 20 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f  .  if( isWriteLo
2fd30 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c  ck || 0==(db->fl
2fd40 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55  ags&SQLITE_ReadU
2fd50 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20  ncommitted) ){. 
2fd60 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d     int p1 = pOp-
2fd70 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74  >p1; .    assert
2fd80 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62  ( p1>=0 && p1<db
2fd90 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73  ->nDb );.    ass
2fda0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2fdb0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 31  p->btreeMask, p1
2fdc0 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
2fdd0 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20   isWriteLock==0 
2fde0 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  || isWriteLock==
2fdf0 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  1 );.    rc = sq
2fe00 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61  lite3BtreeLockTa
2fe10 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e  ble(db->aDb[p1].
2fe20 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73  pBt, pOp->p2, is
2fe30 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20  WriteLock);.    
2fe40 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53  if( (rc&0xFF)==S
2fe50 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a  QLITE_LOCKED ){.
2fe60 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2fe70 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b   *z = pOp->p4.z;
2fe80 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
2fe90 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2fea0 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61  Msg, db, "databa
2feb0 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b  se table is lock
2fec0 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20  ed: %s", z);.   
2fed0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
2fee0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2fef0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
2ff00 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ACHE */..#ifndef
2ff10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2ff20 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2ff30 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20  ode: VBegin * * 
2ff40 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2ff50 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72  may be a pointer
2ff60 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76   to an sqlite3_v
2ff70 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49  tab structure. I
2ff80 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a  f so, call the .
2ff90 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64  ** xBegin method
2ffa0 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
2ffb0 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65  .**.** Also, whe
2ffc0 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69  ther or not P4 i
2ffd0 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61  s set, check tha
2ffe0 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65  t this is not be
2fff0 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a  ing called from.
30000 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c  ** within a call
30010 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61  back to a virtua
30020 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20  l table xSync() 
30030 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73  method. If it is
30040 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63  , the error.** c
30050 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20  ode will be set 
30060 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  to SQLITE_LOCKED
30070 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65  ..*/.case OP_VBe
30080 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20  gin: {.  VTable 
30090 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20  *pVTab;.  pVTab 
300a0 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b  = pOp->p4.pVtab;
300b0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
300c0 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54  tabBegin(db, pVT
300d0 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62  ab);.  if( pVTab
300e0 20 29 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d   ) sqlite3VtabIm
300f0 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
30100 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62  Tab->pVtab);.  b
30110 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
30120 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
30130 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
30140 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30150 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
30160 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61  /* Opcode: VCrea
30170 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  te P1 * * P4 *.*
30180 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
30190 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
301a0 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
301b0 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20  se P1. Call the 
301c0 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a  xCreate method.*
301d0 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  * for that table
301e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72  ..*/.case OP_VCr
301f0 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73  eate: {.  rc = s
30200 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
30210 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  eate(db, pOp->p1
30220 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d  , pOp->p4.z, &p-
30230 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65  >zErrMsg);.  bre
30240 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
30250 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
30260 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
30270 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
30280 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
30290 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f   Opcode: VDestro
302a0 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  y P1 * * P4 *.**
302b0 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61  .** P4 is the na
302c0 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
302d0 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
302e0 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20  e P1.  Call the 
302f0 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a  xDestroy method.
30300 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
30310 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65  ..*/.case OP_VDe
30320 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e  stroy: {.  p->in
30330 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a  VtabMethod = 2;.
30340 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
30350 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62  abCallDestroy(db
30360 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
30370 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74  p4.z);.  p->inVt
30380 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
30390 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
303a0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
303b0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
303c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
303d0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
303e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65  ./* Opcode: VOpe
303f0 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  n P1 * * P4 *.**
30400 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
30410 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
30420 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
30430 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
30440 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20  tructure..** P1 
30450 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62  is a cursor numb
30460 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  er.  This opcode
30470 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20   opens a cursor 
30480 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  to the virtual.*
30490 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72  * table and stor
304a0 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69  es that cursor i
304b0 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P1..*/.case OP
304c0 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  _VOpen: {.  Vdbe
304d0 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
304e0 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
304f0 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72  sor *pVtabCursor
30500 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
30510 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74   *pVtab;.  sqlit
30520 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
30530 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  le;..  assert( p
30540 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
30550 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74   pCur = 0;.  pVt
30560 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20  abCursor = 0;.  
30570 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
30580 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
30590 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
305a0 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
305b0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
305c0 73 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d  sert(pVtab && pM
305d0 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20 70  odule);.  rc = p
305e0 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56  Module->xOpen(pV
305f0 74 61 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f  tab, &pVtabCurso
30600 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  r);.  sqlite3Vta
30610 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
30620 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53   pVtab);.  if( S
30630 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a  QLITE_OK==rc ){.
30640 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
30650 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
30660 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
30670 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72   */.    pVtabCur
30680 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74  sor->pVtab = pVt
30690 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74  ab;..    /* Init
306a0 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73  ialize vdbe curs
306b0 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20  or object */.   
306c0 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
306d0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
306e0 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  1, 0, -1, 0);.  
306f0 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20    if( pCur ){.  
30700 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43      pCur->pVtabC
30710 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72  ursor = pVtabCur
30720 73 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  sor;.    }else{.
30730 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63        db->malloc
30740 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20  Failed = 1;.    
30750 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73    pModule->xClos
30760 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  e(pVtabCursor);.
30770 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
30780 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
30790 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
307a0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
307b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
307c0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
307d0 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20  Opcode: VFilter 
307e0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
307f0 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61 6e   Synopsis: iplan
30800 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50 34  =r[P3] zplan='P4
30810 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  '.**.** P1 is a 
30820 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73  cursor opened us
30830 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69  ing VOpen.  P2 i
30840 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20  s an address to 
30850 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68  jump to if.** th
30860 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c  e filtered resul
30870 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a  t set is empty..
30880 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68  **.** P4 is eith
30890 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72  er NULL or a str
308a0 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e  ing that was gen
308b0 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42  erated by the xB
308c0 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68  estIndex.** meth
308d0 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
308e0 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74  .  The interpret
308f0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20  ation of the P4 
30900 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a  string is left.*
30910 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  * to the module 
30920 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a  implementation..
30930 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
30940 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46  e invokes the xF
30950 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20  ilter method on 
30960 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
30970 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62  e specified.** b
30980 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67  y P1.  The integ
30990 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61  er query plan pa
309a0 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74  rameter to xFilt
309b0 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  er is stored in 
309c0 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20  register.** P3. 
309d0 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74  Register P3+1 st
309e0 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61  ores the argc pa
309f0 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61  rameter to be pa
30a00 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78  ssed to the.** x
30a10 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52  Filter method. R
30a20 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50  egisters P3+2..P
30a30 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65  3+1+argc are the
30a40 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f   argc.** additio
30a50 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77  nal parameters w
30a60 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20  hich are passed 
30a70 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73  to.** xFilter as
30a80 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20   argv. Register 
30a90 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67  P3+2 becomes arg
30aa0 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64  v[0] when passed
30ab0 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a   to xFilter..**.
30ac0 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64  ** A jump is mad
30ad0 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72  e to P2 if the r
30ae0 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20  esult set after 
30af0 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20  filtering would 
30b00 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73  be empty..*/.cas
30b10 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20  e OP_VFilter: { 
30b20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
30b30 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
30b40 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73  Query;.  const s
30b50 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
30b60 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70  Module;.  Mem *p
30b70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41  Query;.  Mem *pA
30b80 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  rgc;.  sqlite3_v
30b90 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61  tab_cursor *pVta
30ba0 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74  bCursor;.  sqlit
30bb0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
30bc0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
30bd0 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  ur;.  int res;. 
30be0 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a   int i;.  Mem **
30bf0 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79  apArg;..  pQuery
30c00 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
30c10 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51  ];.  pArgc = &pQ
30c20 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20  uery[1];.  pCur 
30c30 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
30c40 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  p1];.  assert( m
30c50 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72 79  emIsValid(pQuery
30c60 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ) );.  REGISTER_
30c70 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
30c80 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74  Query);.  assert
30c90 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
30ca0 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75  sor );.  pVtabCu
30cb0 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74  rsor = pCur->pVt
30cc0 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61  abCursor;.  pVta
30cd0 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  b = pVtabCursor-
30ce0 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
30cf0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
30d00 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74  le;..  /* Grab t
30d10 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20  he index number 
30d20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74  and argc paramet
30d30 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ers */.  assert(
30d40 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26   (pQuery->flags&
30d50 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70  MEM_Int)!=0 && p
30d60 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  Argc->flags==MEM
30d70 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d  _Int );.  nArg =
30d80 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69   (int)pArgc->u.i
30d90 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e  ;.  iQuery = (in
30da0 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a  t)pQuery->u.i;..
30db0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
30dc0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a  xFilter method *
30dd0 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20  /.  {.    res = 
30de0 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70  0;.    apArg = p
30df0 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72  ->apArg;.    for
30e00 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20  (i = 0; i<nArg; 
30e10 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72  i++){.      apAr
30e20 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b  g[i] = &pArgc[i+
30e30 31 5d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  1];.    }..    p
30e40 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
30e50 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   1;.    rc = pMo
30e60 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56  dule->xFilter(pV
30e70 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72  tabCursor, iQuer
30e80 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41  y, pOp->p4.z, nA
30e90 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20  rg, apArg);.    
30ea0 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
30eb0 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
30ec0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
30ed0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
30ee0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
30ef0 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  K ){.      res =
30f00 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
30f10 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20  VtabCursor);.   
30f20 20 7d 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63   }.    VdbeBranc
30f30 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
30f40 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b  ;.    if( res ){
30f50 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
30f60 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20  >p2 - 1;.    }. 
30f70 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   }.  pCur->nullR
30f80 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b  ow = 0;..  break
30f90 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
30fa0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
30fb0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
30fc0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
30fd0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
30fe0 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50  pcode: VColumn P
30ff0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
31000 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76  ynopsis: r[P3]=v
31010 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a  column(P2).**.**
31020 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65   Store the value
31030 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f   of the P2-th co
31040 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72  lumn of.** the r
31050 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  ow of the virtua
31060 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  l-table that the
31070 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69   .** P1 cursor i
31080 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e  s pointing to in
31090 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
310a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75  */.case OP_VColu
310b0 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  mn: {.  sqlite3_
310c0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
310d0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
310e0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
310f0 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71  Mem *pDest;.  sq
31100 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43  lite3_context sC
31110 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43  ontext;..  VdbeC
31120 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d  ursor *pCur = p-
31130 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
31140 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
31150 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
31160 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
31170 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
31180 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
31190 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20  sor) );.  pDest 
311a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
311b0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
311c0 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
311d0 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
311e0 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Row ){.    sqlit
311f0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
31200 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65  (pDest);.    bre
31210 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
31220 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
31230 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
31240 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
31250 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
31260 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  ( pModule->xColu
31270 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26  mn );.  memset(&
31280 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a  sContext, 0, siz
31290 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a  eof(sContext));.
312a0 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74  .  /* The output
312b0 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64   cell may alread
312c0 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20  y have a buffer 
312d0 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a  allocated. Move.
312e0 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74    ** the current
312f0 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f   contents to sCo
31300 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61  ntext.s so in ca
31310 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63  se the user-func
31320 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75  tion .  ** can u
31330 73 65 20 74 68 65 20 61 6c 72 65 61 64 79 20 61  se the already a
31340 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20  llocated buffer 
31350 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63  instead of alloc
31360 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65  ating a .  ** ne
31370 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71  w one..  */.  sq
31380 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
31390 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44  (&sContext.s, pD
313a0 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  est);.  MemSetTy
313b0 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74  peFlag(&sContext
313c0 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a  .s, MEM_Null);..
313d0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
313e0 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56  xColumn(pCur->pV
313f0 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e  tabCursor, &sCon
31400 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  text, pOp->p2);.
31410 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
31420 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
31430 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74  ab);.  if( sCont
31440 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ext.isError ){. 
31450 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74     rc = sContext
31460 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  .isError;.  }.. 
31470 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
31480 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
31490 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65  ion to the P3 re
314a0 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20  gister. We.  ** 
314b0 64 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c 65  do this regardle
314c0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
314d0 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63   not an error oc
314e0 63 75 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65  curred to ensure
314f0 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69   any.  ** dynami
31500 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20  c allocation in 
31510 73 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65  sContext.s (a Me
31520 6d 20 73 74 72 75 63 74 29 20 69 73 20 20 72 65  m struct) is  re
31530 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73  leased..  */.  s
31540 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
31550 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65  Encoding(&sConte
31560 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  xt.s, encoding);
31570 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
31580 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43  mMove(pDest, &sC
31590 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 52 45 47  ontext.s);.  REG
315a0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
315b0 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55  >p3, pDest);.  U
315c0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
315d0 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66  ZE(pDest);..  if
315e0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
315f0 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b  TooBig(pDest) ){
31600 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
31610 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
31620 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
31630 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
31640 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
31650 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
31660 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
31670 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32  ode: VNext P1 P2
31680 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76   * * *.**.** Adv
31690 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62  ance virtual tab
316a0 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78  le P1 to the nex
316b0 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73  t row in its res
316c0 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a  ult set and.** j
316d0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
316e0 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74  on P2.  Or, if t
316f0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
31700 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20   has reached.** 
31710 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72  the end of its r
31720 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20  esult set, then 
31730 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
31740 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
31750 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
31760 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a  _VNext: {   /* j
31770 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ump */.  sqlite3
31780 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
31790 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
317a0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
317b0 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65   int res;.  Vdbe
317c0 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20  Cursor *pCur;.. 
317d0 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72   res = 0;.  pCur
317e0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
317f0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
31800 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
31810 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  r );.  if( pCur-
31820 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
31830 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
31840 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
31850 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
31860 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
31870 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
31880 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  ert( pModule->xN
31890 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ext );..  /* Inv
318a0 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20  oke the xNext() 
318b0 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
318c0 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e  dule. There is n
318d0 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20  o way for the.  
318e0 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d  ** underlying im
318f0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
31900 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
31910 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75  if one occurs du
31920 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28  ring.  ** xNext(
31930 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61  ). Instead, if a
31940 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
31950 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64  true is returned
31960 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61   (indicating tha
31970 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20  t .  ** data is 
31980 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74  available) and t
31990 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65  he error code re
319a0 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c  turned when xCol
319b0 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65  umn or.  ** some
319c0 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73   other method is
319d0 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e   next invoked on
319e0 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61   the save virtua
319f0 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a  l table cursor..
31a00 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62    */.  p->inVtab
31a10 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63  Method = 1;.  rc
31a20 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78   = pModule->xNex
31a30 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  t(pCur->pVtabCur
31a40 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  sor);.  p->inVta
31a50 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73  bMethod = 0;.  s
31a60 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
31a70 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
31a80 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
31a90 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73  TE_OK ){.    res
31aa0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66   = pModule->xEof
31ab0 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73  (pCur->pVtabCurs
31ac0 6f 72 29 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42  or);.  }.  VdbeB
31ad0 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c  ranchTaken(!res,
31ae0 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29  2);.  if( !res )
31af0 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72  {.    /* If ther
31b00 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20  e is data, jump 
31b10 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63 20  to P2 */.    pc 
31b20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
31b30 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f   }.  goto check_
31b40 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
31b50 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
31b60 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
31b70 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
31b80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
31b90 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
31ba0 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a  de: VRename P1 *
31bb0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
31bc0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
31bd0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
31be0 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
31bf0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
31c00 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  re..** This opco
31c10 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63  de invokes the c
31c20 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65  orresponding xRe
31c30 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65  name method. The
31c40 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67   value.** in reg
31c50 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73 73  ister P1 is pass
31c60 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20  ed as the zName 
31c70 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
31c80 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a  xRename method..
31c90 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61  */.case OP_VRena
31ca0 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  me: {.  sqlite3_
31cb0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d  vtab *pVtab;.  M
31cc0 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56  em *pName;..  pV
31cd0 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
31ce0 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e  tab->pVtab;.  pN
31cf0 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ame = &aMem[pOp-
31d00 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
31d10 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e  pVtab->pModule->
31d20 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73  xRename );.  ass
31d30 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
31d40 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73 65  pName) );.  asse
31d50 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
31d60 3d 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  =0 );.  REGISTER
31d70 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
31d80 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74  pName);.  assert
31d90 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26  ( pName->flags &
31da0 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65   MEM_Str );.  te
31db0 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
31dc0 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  nc==SQLITE_UTF8 
31dd0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
31de0 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
31df0 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74  E_UTF16BE );.  t
31e00 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
31e10 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
31e20 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  6LE );.  rc = sq
31e30 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
31e40 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53  ncoding(pName, S
31e50 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69  QLITE_UTF8);.  i
31e60 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
31e70 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 70 56 74   ){.    rc = pVt
31e80 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
31e90 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d  name(pVtab, pNam
31ea0 65 2d 3e 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74  e->z);.    sqlit
31eb0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
31ec0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
31ed0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
31ee0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
31ef0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
31f00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
31f10 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
31f20 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31 20  ode: VUpdate P1 
31f30 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
31f40 79 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d 72 5b  ynopsis: data=r[
31f50 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20  P3@P2].**.** P4 
31f60 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
31f70 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
31f80 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
31f90 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
31fa0 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  e..** This opcod
31fb0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f  e invokes the co
31fc0 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64  rresponding xUpd
31fd0 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76  ate method. P2 v
31fe0 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e  alues.** are con
31ff0 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63  tiguous memory c
32000 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74  ells starting at
32010 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74   P3 to pass to t
32020 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69  he xUpdate .** i
32030 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76  nvocation. The v
32040 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
32050 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65   (P3+P2-1) corre
32060 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a  sponds to the .*
32070 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f  * p2th element o
32080 66 20 74 68 65 20 61 72 67 76 20 61 72 72 61 79  f the argv array
32090 20 70 61 73 73 65 64 20 74 6f 20 78 55 70 64 61   passed to xUpda
320a0 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55  te..**.** The xU
320b0 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c  pdate method wil
320c0 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72  l do a DELETE or
320d0 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f   an INSERT or bo
320e0 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b  th..** The argv[
320f0 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63  0] element (whic
32100 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  h corresponds to
32110 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29   memory cell P3)
32120 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64  .** is the rowid
32130 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c   of a row to del
32140 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d  ete.  If argv[0]
32150 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f   is NULL then no
32160 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63   .** deletion oc
32170 63 75 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b  curs.  The argv[
32180 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68  1] element is th
32190 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e  e rowid of the n
321a0 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69  ew .** row.  Thi
321b0 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f  s can be NULL to
321c0 20 68 61 76 65 20 74 68 65 20 76 69 72 74 75 61   have the virtua
321d0 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74  l table select t
321e0 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64  he new .** rowid
321f0 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68   for itself.  Th
32200 65 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65  e subsequent ele
32210 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72  ments in the arr
32220 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76  ay are .** the v
32230 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73  alues of columns
32240 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e   in the new row.
32250 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20  .**.** If P2==1 
32260 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69  then no insert i
32270 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72  s performed.  ar
32280 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77  gv[0] is the row
32290 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74  id of.** a row t
322a0 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20  o delete..**.** 
322b0 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20  P1 is a boolean 
322c0 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20 73  flag. If it is s
322d0 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74  et to true and t
322e0 68 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a  he xUpdate call.
322f0 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66 75 6c  ** is successful
32300 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
32310 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
32320 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
32330 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20  _rowid() .** is 
32340 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
32350 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f   of the rowid fo
32360 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69  r the row just i
32370 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  nserted..**.** P
32380 35 20 69 73 20 74 68 65 20 65 72 72 6f 72 20 61  5 is the error a
32390 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61  ctions (OE_Repla
323a0 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f  ce, OE_Fail, OE_
323b0 49 67 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a  Ignore, etc) to.
323c0 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74 68 65 20  ** apply in the 
323d0 63 61 73 65 20 6f 66 20 61 20 63 6f 6e 73 74 72  case of a constr
323e0 61 69 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e 20  aint failure on 
323f0 61 6e 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64  an insert or upd
32400 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ate..*/.case OP_
32410 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c  VUpdate: {.  sql
32420 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
32430 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ;.  sqlite3_modu
32440 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
32450 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
32460 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ;.  sqlite_int64
32470 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a   rowid;.  Mem **
32480 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58  apArg;.  Mem *pX
32490 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
324a0 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c  ->p2==1        |
324b0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61  | pOp->p5==OE_Fa
324c0 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  il   || pOp->p5=
324d0 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20  =OE_Rollback .  
324e0 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d       || pOp->p5=
324f0 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70  =OE_Abort || pOp
32500 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p5==OE_Ignore 
32510 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52  || pOp->p5==OE_R
32520 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73  eplace.  );.  as
32530 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
32540 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20  y==0 );.  pVtab 
32550 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
32560 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
32570 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64  e = (sqlite3_mod
32580 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f  ule *)pVtab->pMo
32590 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70  dule;.  nArg = p
325a0 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
325b0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
325c0 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20  4_VTAB );.  if( 
325d0 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e  ALWAYS(pModule->
325e0 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20  xUpdate) ){.    
325f0 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  u8 vtabOnConflic
32600 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f  t = db->vtabOnCo
32610 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72  nflict;.    apAr
32620 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  g = p->apArg;.  
32630 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70    pX = &aMem[pOp
32640 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69  ->p3];.    for(i
32650 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
32660 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
32670 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29  memIsValid(pX) )
32680 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
32690 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b  ToChange(p, pX);
326a0 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
326b0 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b  = pX;.      pX++
326c0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e  ;.    }.    db->
326d0 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d  vtabOnConflict =
326e0 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63   pOp->p5;.    rc
326f0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64   = pModule->xUpd
32700 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c  ate(pVtab, nArg,
32710 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b   apArg, &rowid);
32720 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43  .    db->vtabOnC
32730 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e  onflict = vtabOn
32740 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73 71  Conflict;.    sq
32750 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
32760 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
32770 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
32780 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70  ITE_OK && pOp->p
32790 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  1 ){.      asser
327a0 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41  t( nArg>1 && apA
327b0 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b  rg[0] && (apArg[
327c0 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75  0]->flags&MEM_Nu
327d0 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ll) );.      db-
327e0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
327f0 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a  tRowid = rowid;.
32800 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72      }.    if( (r
32810 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
32820 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f  CONSTRAINT && pO
32830 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f  p->p4.pVtab->bCo
32840 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20  nstraint ){.    
32850 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f    if( pOp->p5==O
32860 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20  E_Ignore ){.    
32870 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
32880 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  OK;.      }else{
32890 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f  .        p->erro
328a0 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d  rAction = ((pOp-
328b0 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29  >p5==OE_Replace)
328c0 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f   ? OE_Abort : pO
328d0 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a  p->p5);.      }.
328e0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
328f0 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
32900 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
32910 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
32920 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
32930 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
32940 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ef  SQLITE_OMIT_
32950 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a  PAGER_PRAGMAS./*
32960 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75   Opcode: Pagecou
32970 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
32980 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
32990 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66  urrent number of
329a0 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62 61   pages in databa
329b0 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20  se P1 to memory 
329c0 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  cell P2..*/.case
329d0 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b   OP_Pagecount: {
329e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
329f0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
32a00 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  /.  pOut->u.i = 
32a10 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
32a20 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70  Page(db->aDb[pOp
32a30 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72  ->p1].pBt);.  br
32a40 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  eak;.}.#endif...
32a50 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f  #ifndef  SQLITE_
32a60 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
32a70 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61  AS./* Opcode: Ma
32a80 78 50 67 63 6e 74 20 50 31 20 50 32 20 50 33 20  xPgcnt P1 P2 P3 
32a90 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f  * *.**.** Try to
32aa0 20 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   set the maximum
32ab0 20 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20   page count for 
32ac0 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 74  database P1 to t
32ad0 68 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a  he value in P3..
32ae0 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68  ** Do not let th
32af0 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
32b00 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20  ount fall below 
32b10 74 68 65 20 63 75 72 72 65 6e 74 20 70 61 67 65  the current page
32b20 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f   count and.** do
32b30 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20   not change the 
32b40 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
32b50 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d  nt value if P3==
32b60 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  0..**.** Store t
32b70 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
32b80 63 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65 20  count after the 
32b90 63 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74  change in regist
32ba0 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
32bb0 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20  P_MaxPgcnt: {   
32bc0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
32bd0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
32be0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65   unsigned int ne
32bf0 77 4d 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70  wMax;.  Btree *p
32c00 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d  Bt;..  pBt = db-
32c10 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
32c20 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b  t;.  newMax = 0;
32c30 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
32c40 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73  {.    newMax = s
32c50 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50  qlite3BtreeLastP
32c60 61 67 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66  age(pBt);.    if
32c70 28 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69  ( newMax < (unsi
32c80 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e  gned)pOp->p3 ) n
32c90 65 77 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65  ewMax = (unsigne
32ca0 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20  d)pOp->p3;.  }. 
32cb0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c   pOut->u.i = sql
32cc0 69 74 65 33 42 74 72 65 65 4d 61 78 50 61 67 65  ite3BtreeMaxPage
32cd0 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61  Count(pBt, newMa
32ce0 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  x);.  break;.}.#
32cf0 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  endif.../* Opcod
32d00 65 3a 20 49 6e 69 74 20 2a 20 50 32 20 2a 20 50  e: Init * P2 * P
32d10 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
32d20 20 20 53 74 61 72 74 20 61 74 20 50 32 0a 2a 2a    Start at P2.**
32d30 0a 2a 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e  .** Programs con
32d40 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e  tain a single in
32d50 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
32d60 70 63 6f 64 65 20 61 73 20 74 68 65 20 76 65 72  pcode as the ver
32d70 79 20 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64  y first.** opcod
32d80 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63  e..**.** If trac
32d90 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ing is enabled (
32da0 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74  by the sqlite3_t
32db0 72 61 63 65 28 29 29 20 69 6e 74 65 72 66 61 63  race()) interfac
32dc0 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55  e, then.** the U
32dd0 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74  TF-8 string cont
32de0 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65  ained in P4 is e
32df0 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72  mitted on the tr
32e00 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a  ace callback..**
32e10 20 4f 72 20 69 66 20 50 34 20 69 73 20 62 6c 61   Or if P4 is bla
32e20 6e 6b 2c 20 75 73 65 20 74 68 65 20 73 74 72 69  nk, use the stri
32e30 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ng returned by s
32e40 71 6c 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a  qlite3_sql()..**
32e50 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 74  .** If P2 is not
32e60 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69   zero, jump to i
32e70 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a  nstruction P2..*
32e80 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20  /.case OP_Init: 
32e90 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  {          /* ju
32ea0 6d 70 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  mp */.  char *zT
32eb0 72 61 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b  race;.  char *z;
32ec0 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  ..  if( pOp->p2 
32ed0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
32ee0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 23 69 66  >p2 - 1;.  }.#if
32ef0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
32f00 5f 54 52 41 43 45 0a 20 20 69 66 28 20 64 62 2d  _TRACE.  if( db-
32f10 3e 78 54 72 61 63 65 0a 20 20 20 26 26 20 21 70  >xTrace.   && !p
32f20 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20  ->doingRerun.   
32f30 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f  && (zTrace = (pO
32f40 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
32f50 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21  4.z : p->zSql))!
32f60 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20  =0.  ){.    z = 
32f70 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e  sqlite3VdbeExpan
32f80 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b  dSql(p, zTrace);
32f90 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28  .    db->xTrace(
32fa0 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a  db->pTraceArg, z
32fb0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  );.    sqlite3Db
32fc0 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d  Free(db, z);.  }
32fd0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
32fe0 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a 20  SE_FCNTL_TRACE. 
32ff0 20 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e   zTrace = (pOp->
33000 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a  p4.z ? pOp->p4.z
33010 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69   : p->zSql);.  i
33020 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20  f( zTrace ){.   
33030 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28   int i;.    for(
33040 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
33050 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
33060 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
33070 72 65 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20 29  reeMask, i)==0 )
33080 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
33090 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
330a0 6e 74 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61 44  ntrol(db, db->aD
330b0 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49  b[i].zName, SQLI
330c0 54 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c 20  TE_FCNTL_TRACE, 
330d0 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20  zTrace);.    }. 
330e0 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
330f0 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52  ITE_USE_FCNTL_TR
33100 41 43 45 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ACE */.#ifdef SQ
33110 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
33120 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
33130 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d  LITE_SqlTrace)!=
33140 30 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20  0.   && (zTrace 
33150 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70  = (pOp->p4.z ? p
33160 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53  Op->p4.z : p->zS
33170 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  ql))!=0.  ){.   
33180 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
33190 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20  ntf("SQL-trace: 
331a0 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a  %s\n", zTrace);.
331b0 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
331c0 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65  LITE_DEBUG */.#e
331d0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
331e0 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20 62  MIT_TRACE */.  b
331f0 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
33200 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20  ode: Noop * * * 
33210 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74  * *.**.** Do not
33220 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74  hing.  This inst
33230 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e  ruction is often
33240 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d   useful as a jum
33250 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e  p.** destination
33260 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d  ..*/./*.** The m
33270 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63  agic Explain opc
33280 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73  ode are only ins
33290 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61  erted when expla
332a0 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20  in==2 (which.** 
332b0 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74  is to say when t
332c0 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  he EXPLAIN QUERY
332d0 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20   PLAN syntax is 
332e0 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f  used.).** This o
332f0 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e  pcode records in
33300 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74  formation from t
33310 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49  he optimizer.  I
33320 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20  t is the.** the 
33330 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e  same as a no-op.
33340 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65    This opcodesne
33350 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20 61  ver appears in a
33360 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d   real VM program
33370 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20  ..*/.default: { 
33380 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73           /* This
33390 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f   is really OP_No
333a0 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69  op and OP_Explai
333b0 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  n */.  assert( p
333c0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
333d0 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  oop || pOp->opco
333e0 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29  de==OP_Explain )
333f0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
33400 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33410 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33420 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33440 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
33450 54 68 65 20 63 61 73 65 73 20 6f 66 20 74 68 65  The cases of the
33460 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
33470 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e  t above this lin
33480 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20  e should all be 
33490 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36  indented.** by 6
334a0 20 73 70 61 63 65 73 2e 20 20 42 75 74 20 74 68   spaces.  But th
334b0 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70  e left-most 6 sp
334c0 61 63 65 73 20 68 61 76 65 20 62 65 65 6e 20 72  aces have been r
334d0 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76  emoved to improv
334e0 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69  e the.** readabi
334f0 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73  lity.  From this
33500 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20   point on down, 
33510 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e  the normal inden
33520 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65  tation rules are
33530 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a  .** restored..**
33540 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33560 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33570 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33580 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20  ***********/.   
33590 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f   }..#ifdef VDBE_
335a0 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20  PROFILE.    {.  
335b0 20 20 20 20 75 36 34 20 65 6e 64 54 69 6d 65 20      u64 endTime 
335c0 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
335d0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 65 6e 64  );.      if( end
335e0 54 69 6d 65 3e 73 74 61 72 74 20 29 20 70 4f 70  Time>start ) pOp
335f0 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64 54  ->cycles += endT
33600 69 6d 65 20 2d 20 73 74 61 72 74 3b 0a 20 20 20  ime - start;.   
33610 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20     pOp->cnt++;. 
33620 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
33630 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
33640 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68  g code adds noth
33650 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75 61  ing to the actua
33660 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a  l functionality.
33670 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72      ** of the pr
33680 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e  ogram.  It is on
33690 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65 73 74  ly here for test
336a0 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e  ing and debuggin
336b0 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65  g..    ** On the
336c0 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20   other hand, it 
336d0 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63 79  does burn CPU cy
336e0 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65 20  cles every time 
336f0 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74  through.    ** t
33700 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f  he evaluator loo
33710 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65  p.  So we can le
33720 61 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20  ave it out when 
33730 4e 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65  NDEBUG is define
33740 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65  d..    */.#ifnde
33750 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73  f NDEBUG.    ass
33760 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70  ert( pc>=-1 && p
33770 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66  c<p->nOp );..#if
33780 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
33790 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61  .    if( db->fla
337a0 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
337b0 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69  Trace ){.      i
337c0 66 28 20 72 63 21 3d 30 20 29 20 70 72 69 6e 74  f( rc!=0 ) print
337d0 66 28 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b  f("rc=%d\n",rc);
337e0 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
337f0 6f 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47  opflags & (OPFLG
33800 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45  _OUT2_PRERELEASE
33810 7c 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a  |OPFLG_OUT2) ){.
33820 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
33830 54 72 61 63 65 28 70 4f 70 2d 3e 70 32 2c 20 26  Trace(pOp->p2, &
33840 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
33850 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
33860 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26  ( pOp->opflags &
33870 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20   OPFLG_OUT3 ){. 
33880 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54         registerT
33890 72 61 63 65 28 70 4f 70 2d 3e 70 33 2c 20 26 61  race(pOp->p3, &a
338a0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
338b0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
338c0 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44  dif  /* SQLITE_D
338d0 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20  EBUG */.#endif  
338e0 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d  /* NDEBUG */.  }
338f0 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20    /* The end of 
33900 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70  the for(;;) loop
33910 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75   the loops throu
33920 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20  gh opcodes */.. 
33930 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20   /* If we reach 
33940 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d  this point, it m
33950 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75 74  eans that execut
33960 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20  ion is finished 
33970 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72  with.  ** an err
33980 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e  or of some kind.
33990 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72  .  */.vdbe_error
339a0 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28  _halt:.  assert(
339b0 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d   rc );.  p->rc =
339c0 20 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28   rc;.  testcase(
339d0 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
339e0 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a  nfig.xLog!=0 );.
339f0 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63    sqlite3_log(rc
33a00 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  , "statement abo
33a10 72 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20  rts at %d: [%s] 
33a20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20  %s", .          
33a30 20 20 20 20 20 20 20 20 20 70 63 2c 20 70 2d 3e           pc, p->
33a40 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  zSql, p->zErrMsg
33a50 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
33a60 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72  Halt(p);.  if( r
33a70 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  c==SQLITE_IOERR_
33a80 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c  NOMEM ) db->mall
33a90 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
33aa0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
33ab0 52 3b 0a 20 20 69 66 28 20 72 65 73 65 74 53 63  R;.  if( resetSc
33ac0 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b  hemaOnFault>0 ){
33ad0 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65  .    sqlite3Rese
33ae0 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 72  tOneSchema(db, r
33af0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
33b00 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  t-1);.  }..  /* 
33b10 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
33b20 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69 73   way out of this
33b30 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65 20   procedure.  We 
33b40 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c  have to.  ** rel
33b50 65 61 73 65 20 74 68 65 20 6d 75 74 65 78 65 73  ease the mutexes
33b60 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74 20   on btrees that 
33b70 77 65 72 65 20 61 63 71 75 69 72 65 64 20 61 74  were acquired at
33b80 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a   the.  ** top. *
33b90 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20  /.vdbe_return:. 
33ba0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
33bb0 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 74 65   lastRowid;.  te
33bc0 73 74 63 61 73 65 28 20 6e 56 6d 53 74 65 70 3e  stcase( nVmStep>
33bd0 30 20 29 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  0 );.  p->aCount
33be0 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
33bf0 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d  ATUS_VM_STEP] +=
33c00 20 28 69 6e 74 29 6e 56 6d 53 74 65 70 3b 0a 20   (int)nVmStep;. 
33c10 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65 61 76   sqlite3VdbeLeav
33c20 65 28 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  e(p);.  return r
33c30 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  c;..  /* Jump to
33c40 20 68 65 72 65 20 69 66 20 61 20 73 74 72 69 6e   here if a strin
33c50 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72  g or blob larger
33c60 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58   than SQLITE_MAX
33c70 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20  _LENGTH.  ** is 
33c80 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a  encountered..  *
33c90 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c  /.too_big:.  sql
33ca0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
33cb0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
33cc0 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
33cd0 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d  oo big");.  rc =
33ce0 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a   SQLITE_TOOBIG;.
33cf0 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
33d00 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
33d10 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
33d20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a  malloc() fails..
33d30 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64    */.no_mem:.  d
33d40 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
33d50 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65  = 1;.  sqlite3Se
33d60 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
33d70 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66  Msg, db, "out of
33d80 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20   memory");.  rc 
33d90 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
33da0 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
33db0 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
33dc0 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61  mp to here for a
33dd0 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66  ny other kind of
33de0 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54   fatal error.  T
33df0 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c 65  he "rc" variable
33e00 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c  .  ** should hol
33e10 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62  d the error numb
33e20 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  er..  */.abort_d
33e30 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61  ue_to_error:.  a
33e40 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73  ssert( p->zErrMs
33e50 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62  g==0 );.  if( db
33e60 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
33e70 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
33e80 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  EM;.  if( rc!=SQ
33e90 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
33ea0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
33eb0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
33ec0 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
33ed0 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
33ee0 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  ));.  }.  goto v
33ef0 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
33f00 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
33f10 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65  re if the sqlite
33f20 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50  3_interrupt() AP
33f30 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72  I sets the inter
33f40 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a  rupt.  ** flag..
33f50 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
33f60 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61  o_interrupt:.  a
33f70 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73  ssert( db->u1.is
33f80 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20  Interrupted );. 
33f90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
33fa0 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20  ERRUPT;.  p->rc 
33fb0 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53  = rc;.  sqlite3S
33fc0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
33fd0 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
33fe0 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
33ff0 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  ));.  goto vdbe_
34000 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a        error_halt;.}.