/ Hex Artifact Content
Login

Artifact 8fde5281f304c31fd635891b3cb138e6b79ce9f5:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
1810: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1820: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1830: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1840: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1850: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1860: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1870: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1880: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1890: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
18a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
18b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1900: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1910: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1920: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1930: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1940: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1950: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1960: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1970: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1980: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1990: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
19a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
19b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
19c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
19d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
19e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
19f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1a00: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1a10: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1a20: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1a30: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1a40: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1a50: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1a60: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1a70: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1a80: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1a90: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1aa0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1ab0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1ac0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1ad0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1ae0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
1af0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1b00: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1b10: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1b20: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1b30: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1b40: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1b50: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1b60: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1b70: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1b80: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1b90: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1ba0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1bb0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1bc0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1bd0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1be0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1bf0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1c00: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1c10: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1c20: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1c30: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1c40: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1c50: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1c60: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1c70: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1c80: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1c90: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1ca0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1cb0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1cc0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1cd0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1ce0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1cf0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1d00: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1d10: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1d20: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1d30: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1d40: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1d50: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1d60: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1d70: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1d80: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1d90: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1da0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1db0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1dc0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1dd0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1de0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1df0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1e00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1e10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1e20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1e30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1e40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1e50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1e60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1e70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1e90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1ea0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1eb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ed0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ee0: 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
1ef0: 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79  Resize(pMem, nBy
1f00: 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70  te) ){.    p->ap
1f10: 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20  Csr[iCur] = pCx 
1f20: 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70  = (VdbeCursor*)p
1f30: 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73  Mem->z;.    mems
1f40: 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f  et(pCx, 0, sizeo
1f50: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a  f(VdbeCursor));.
1f60: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
1f70: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
1f80: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
1f90: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
1fa0: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
1fb0: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 69 73  eld];.    if( is
1fc0: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1fd0: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1fe0: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1ff0: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2000: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
2010: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
2020: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
2030: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
2040: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
2050: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
2060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2070: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2080: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2090: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
20a0: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
20b0: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
20c0: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
20d0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
20e0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
20f0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
2100: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
2110: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
2120: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2130: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2140: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2150: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2160: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2170: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2180: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2190: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
21a0: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
21b0: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
21c0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
21d0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
21e0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
21f0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
2200: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
2210: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
2220: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2230: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2240: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2250: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2260: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2270: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2280: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2290: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
22a0: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
22b0: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
22c0: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
22d0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
22e0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
22f0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2300: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2310: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2320: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2330: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2340: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2350: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2360: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2370: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2380: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2390: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
23a0: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
23b0: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
23c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
23d0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
23e0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
23f0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2400: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2410: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2420: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2430: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2440: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2450: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2460: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2470: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2480: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2490: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
24a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
24b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
24c0: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
24d0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
24e0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
24f0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2500: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2510: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2520: 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ec);.  }.}../*.*
2530: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
2540: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
2550: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
2560: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
2570: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
2580: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
2590: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
25a0: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
25b0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
25c0: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
25d0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25e0: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
25f0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
2600: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
2610: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2620: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
2630: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
2640: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
2650: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2660: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
2670: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
2680: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
2690: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
26a0: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
26b0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
26c0: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
26d0: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
26e0: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
2700: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
2710: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
2720: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
2730: 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42   SQLITE_AFF_BLOB
2740: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
2750: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
2760: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
2770: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2780: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
2790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
27a0: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
27b0: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
27c0: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
27d0: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
27e0: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
27f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
2800: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
2810: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
2820: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
2830: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
2840: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
2850: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2860: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2870: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2880: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2890: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
28a0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
28b0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
28c0: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
28d0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
28e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
28f0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2900: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
2910: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
2920: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2930: 4d 5f 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d  M_Str ) applyNum
2940: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2950: 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  c,1);.      }els
2960: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2970: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2980: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2990: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
29a0: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
29b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
29c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
29d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
29e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
29f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2a00: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2a10: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2a20: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2a30: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2a40: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2a50: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2a60: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2a70: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2a80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2a90: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
2aa0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
2ab0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
2ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ad0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2ae0: 20 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a   enc, 1);.    }.
2af0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
2b00: 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45  &= ~(MEM_Real|ME
2b10: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  M_Int);.  }.}../
2b20: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2b30: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2b40: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2b50: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2b60: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2b70: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2b80: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2b90: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2ba0: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2bb0: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2bc0: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2bd0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2be0: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2bf0: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2c00: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2c10: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2c20: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2c30: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69  e argument..*/.i
2c40: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
2c50: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
2c60: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2c70: 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20  l){.  int eType 
2c80: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
2c90: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66  type(pVal);.  if
2ca0: 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  ( eType==SQLITE_
2cb0: 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20  TEXT ){.    Mem 
2cc0: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
2cd0: 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d  al;.    applyNum
2ce0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2cf0: 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70 65  m, 0);.    eType
2d00: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
2d10: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d  _type(pVal);.  }
2d20: 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b  .  return eType;
2d30: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
2d40: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
2d50: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
2d60: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
2d70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
2d80: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
2d90: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
2da0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2db0: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2dc0: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
2dd0: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
2de0: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
2df0: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
2e00: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
2e10: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
2e20: 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d  nc);.}../*.** pM
2e30: 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c  em currently onl
2e40: 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67  y holds a string
2e50: 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65 20   type (or maybe 
2e60: 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20 63  a BLOB that we c
2e70: 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74 20  an.** interpret 
2e80: 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20 77  as a string if w
2e90: 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f 6d  e want to).  Com
2ea0: 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73 70  pute its corresp
2eb0: 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69  onding.** numeri
2ec0: 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20 6f  c type, if has o
2ed0: 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d 65  ne.  Set the pMe
2ee0: 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d  m->u.r and pMem-
2ef0: 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20 61  >u.i fields.** a
2f00: 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73  ccordingly..*/.s
2f10: 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54 45  tatic u16 SQLITE
2f20: 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75 74  _NOINLINE comput
2f30: 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d  eNumericType(Mem
2f40: 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72   *pMem){.  asser
2f50: 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
2f60: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
2f70: 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73  eal))==0 );.  as
2f80: 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
2f90: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2fa0: 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a 20  M_Blob))!=0 );. 
2fb0: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
2fc0: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
2fd0: 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.r, pMem->n, p
2fe0: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
2ff0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
3000: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  }.  if( sqlite3A
3010: 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26  toi64(pMem->z, &
3020: 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d  pMem->u.i, pMem-
3030: 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d  >n, pMem->enc)==
3040: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
3050: 20 72 65 74 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b   return MEM_Int;
3060: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 4d 45  .  }.  return ME
3070: 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  M_Real;.}../*.**
3080: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 65   Return the nume
3090: 72 69 63 20 74 79 70 65 20 66 6f 72 20 70 4d 65  ric type for pMe
30a0: 6d 2c 20 65 69 74 68 65 72 20 4d 45 4d 5f 49 6e  m, either MEM_In
30b0: 74 20 6f 72 20 4d 45 4d 5f 52 65 61 6c 20 6f 72  t or MEM_Real or
30c0: 20 62 6f 74 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65   both or.** none
30d0: 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65  .  .**.** Unlike
30e0: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
30f0: 69 6e 69 74 79 28 29 2c 20 74 68 69 73 20 72 6f  inity(), this ro
3100: 75 74 69 6e 65 20 64 6f 65 73 20 6e 6f 74 20 6d  utine does not m
3110: 6f 64 69 66 79 20 70 4d 65 6d 2d 3e 66 6c 61 67  odify pMem->flag
3120: 73 2e 0a 2a 2a 20 42 75 74 20 69 74 20 64 6f 65  s..** But it doe
3130: 73 20 73 65 74 20 70 4d 65 6d 2d 3e 75 2e 72 20  s set pMem->u.r 
3140: 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 61 70  and pMem->u.i ap
3150: 70 72 6f 70 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a  propriately..*/.
3160: 73 74 61 74 69 63 20 75 31 36 20 6e 75 6d 65 72  static u16 numer
3170: 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d  icType(Mem *pMem
3180: 29 7b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66  ){.  if( pMem->f
3190: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
31a0: 4d 45 4d 5f 52 65 61 6c 29 20 29 7b 0a 20 20 20  MEM_Real) ){.   
31b0: 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c   return pMem->fl
31c0: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
31d0: 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 7d 0a 20 20  EM_Real);.  }.  
31e0: 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  if( pMem->flags 
31f0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
3200: 6c 6f 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  lob) ){.    retu
3210: 72 6e 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69  rn computeNumeri
3220: 63 54 79 70 65 28 70 4d 65 6d 29 3b 0a 20 20 7d  cType(pMem);.  }
3230: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
3240: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3250: 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20  BUG./*.** Write 
3260: 61 20 6e 69 63 65 20 73 74 72 69 6e 67 20 72 65  a nice string re
3270: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
3280: 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
3290: 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74  cell pMem.** int
32a0: 6f 20 62 75 66 66 65 72 20 7a 42 75 66 2c 20 6c  o buffer zBuf, l
32b0: 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76  ength nBuf..*/.v
32c0: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d  oid sqlite3VdbeM
32d0: 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 4d 65  emPrettyPrint(Me
32e0: 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a  m *pMem, char *z
32f0: 42 75 66 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43  Buf){.  char *zC
3300: 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74  sr = zBuf;.  int
3310: 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   f = pMem->flags
3320: 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ;..  static cons
3330: 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e  t char *const en
3340: 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29  cnames[] = {"(X)
3350: 22 2c 20 22 28 38 29 22 2c 20 22 28 31 36 4c 45  ", "(8)", "(16LE
3360: 29 22 2c 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a  )", "(16BE)"};..
3370: 20 20 69 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62    if( f&MEM_Blob
3380: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
3390: 20 20 20 63 68 61 72 20 63 3b 0a 20 20 20 20 69     char c;.    i
33a0: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
33b0: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 7a 27 3b  {.      c = 'z';
33c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
33d0: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
33e0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
33f0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3400: 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29  f & MEM_Static )
3410: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 74 27 3b  {.      c = 't';
3420: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3430: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
3440: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3450: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3460: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
3470: 20 20 20 20 63 20 3d 20 27 65 27 3b 0a 20 20 20      c = 'e';.   
3480: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3490: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
34a0: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
34b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 20 3d  }else{.      c =
34c0: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   's';.    }..   
34d0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
34e0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 63  f(100, zCsr, "%c
34f0: 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43 73 72 20  ", c);.    zCsr 
3500: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3510: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 73 71  30(zCsr);.    sq
3520: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3530: 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c  00, zCsr, "%d[",
3540: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a   pMem->n);.    z
3550: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3560: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3570: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20    for(i=0; i<16 
3580: 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b  && i<pMem->n; i+
3590: 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  +){.      sqlite
35a0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
35b0: 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28  zCsr, "%02X", ((
35c0: 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26  int)pMem->z[i] &
35d0: 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a   0xFF));.      z
35e0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
35f0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3600: 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b    }.    for(i=0;
3610: 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d   i<16 && i<pMem-
3620: 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; i++){.      
3630: 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a  char z = pMem->z
3640: 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  [i];.      if( z
3650: 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a  <32 || z>126 ) *
3660: 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20  zCsr++ = '.';.  
3670: 20 20 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b      else *zCsr++
3680: 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   = z;.    }..   
3690: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
36a0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25  f(100, zCsr, "]%
36b0: 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  s", encnames[pMe
36c0: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43  m->enc]);.    zC
36d0: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
36e0: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
36f0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72   if( f & MEM_Zer
3700: 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  o ){.      sqlit
3710: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3720: 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65   zCsr,"+%dz",pMe
3730: 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20  m->u.nZero);.   
3740: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3750: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3760: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73  ;.    }.    *zCs
3770: 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73  r = '\0';.  }els
3780: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3790: 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20  r ){.    int j, 
37a0: 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d  k;.    zBuf[0] =
37b0: 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66 20   ' ';.    if( f 
37c0: 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20  & MEM_Dyn ){.   
37d0: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27     zBuf[1] = 'z'
37e0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
37f0: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
3800: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3810: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3820: 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20   f & MEM_Static 
3830: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
3840: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
3850: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3860: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
3870: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3880: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
3890: 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  m ){.      zBuf[
38a0: 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20  1] = 'e';.      
38b0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
38c0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
38d0: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
38e0: 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31  se{.      zBuf[1
38f0: 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20  ] = 's';.    }. 
3900: 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71     k = 2;.    sq
3910: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3920: 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25  00, &zBuf[k], "%
3930: 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  d", pMem->n);.  
3940: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
3950: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
3960: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
3970: 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a  = '[';.    for(j
3980: 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d  =0; j<15 && j<pM
3990: 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20  em->n; j++){.   
39a0: 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e     u8 c = pMem->
39b0: 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[j];.      if( 
39c0: 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78 37  c>=0x20 && c<0x7
39d0: 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  f ){.        zBu
39e0: 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20  f[k++] = c;.    
39f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
3a00: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27   zBuf[k++] = '.'
3a10: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
3a20: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3a30: 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ']';.    sqlite3
3a40: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26 7a  _snprintf(100,&z
3a50: 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73  Buf[k], encnames
3a60: 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20  [pMem->enc]);.  
3a70: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
3a80: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
3a90: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
3aa0: 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69  = 0;.  }.}.#endi
3ab0: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
3ac0: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69  _DEBUG./*.** Pri
3ad0: 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nt the value of 
3ae0: 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20 74  a register for t
3af0: 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73 3a  racing purposes:
3b00: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3b10: 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 4d 65  memTracePrint(Me
3b20: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e  m *p){.  if( p->
3b30: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65  flags & MEM_Unde
3b40: 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70 72 69  fined ){.    pri
3b50: 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65 64 22  ntf(" undefined"
3b60: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  );.  }else if( p
3b70: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
3b80: 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ll ){.    printf
3b90: 28 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c  (" NULL");.  }el
3ba0: 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  se if( (p->flags
3bb0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3bc0: 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c  Str))==(MEM_Int|
3bd0: 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20  MEM_Str) ){.    
3be0: 70 72 69 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64  printf(" si:%lld
3bf0: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65  ", p->u.i);.  }e
3c00: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3c10: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
3c20: 20 20 70 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c    printf(" i:%ll
3c30: 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66  d", p->u.i);.#if
3c40: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3c50: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
3c60: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3c70: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
3c80: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3c90: 72 3a 25 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a  r:%g", p->u.r);.
3ca0: 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20 69  #endif.  }else i
3cb0: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3cc0: 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20 20 20  M_RowSet ){.    
3cd0: 70 72 69 6e 74 66 28 22 20 28 72 6f 77 73 65 74  printf(" (rowset
3ce0: 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  )");.  }else{.  
3cf0: 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d    char zBuf[200]
3d00: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
3d10: 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28  eMemPrettyPrint(
3d20: 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 70 72  p, zBuf);.    pr
3d30: 69 6e 74 66 28 22 20 25 73 22 2c 20 7a 42 75 66  intf(" %s", zBuf
3d40: 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20  );.  }.}.static 
3d50: 76 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61  void registerTra
3d60: 63 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d  ce(int iReg, Mem
3d70: 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22   *p){.  printf("
3d80: 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65  REG[%d] = ", iRe
3d90: 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72  g);.  memTracePr
3da0: 69 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66  int(p);.  printf
3db0: 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66  ("\n");.}.#endif
3dc0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
3dd0: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
3de0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
3df0: 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73  ,M) if(db->flags
3e00: 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63  &SQLITE_VdbeTrac
3e10: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
3e20: 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  R,M).#else.#  de
3e30: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
3e40: 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a  ACE(R,M).#endif.
3e50: 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
3e60: 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77  OFILE../* .** hw
3e70: 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20  time.h contains 
3e80: 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72  inline assembler
3e90: 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d   code for implem
3ea0: 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d  enting .** high-
3eb0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69  performance timi
3ec0: 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a  ng routines..*/.
3ed0: 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65  #include "hwtime
3ee0: 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .h"..#endif..#if
3ef0: 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a  ndef NDEBUG./*.*
3f00: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
3f10: 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66  is only called f
3f20: 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73  rom within an as
3f30: 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f  sert() expressio
3f40: 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20  n. It.** checks 
3f50: 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33  that the sqlite3
3f60: 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61  .nTransaction va
3f70: 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63  riable is correc
3f80: 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68  tly set to.** th
3f90: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  e number of non-
3fa0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
3fb0: 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79  points currently
3fc0: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b   in the .** link
3fd0: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
3fe0: 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76   at sqlite3.pSav
3ff0: 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55  epoint..** .** U
4000: 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  sage:.**.**     
4010: 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
4020: 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
4030: 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  );.*/.static int
4040: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
4050: 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62  ount(sqlite3 *db
4060: 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a  ){.  int n = 0;.
4070: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a    Savepoint *p;.
4080: 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76    for(p=db->pSav
4090: 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e  epoint; p; p=p->
40a0: 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73  pNext) n++;.  as
40b0: 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53  sert( n==(db->nS
40c0: 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69  avepoint + db->i
40d0: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
40e0: 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75  point) );.  retu
40f0: 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  rn 1;.}.#endif..
4100: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
4110: 20 72 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70   register of pOp
4120: 2d 3e 70 32 20 61 66 74 65 72 20 66 69 72 73 74  ->p2 after first
4130: 20 70 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f   preparing it to
4140: 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74   be.** overwritt
4150: 65 6e 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67  en with an integ
4160: 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 20 0a 73 74  er value..*/ .st
4170: 61 74 69 63 20 4d 65 6d 20 2a 6f 75 74 32 50 72  atic Mem *out2Pr
4180: 65 72 65 6c 65 61 73 65 28 56 64 62 65 20 2a 70  erelease(Vdbe *p
4190: 2c 20 56 64 62 65 4f 70 20 2a 70 4f 70 29 7b 0a  , VdbeOp *pOp){.
41a0: 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 20 20 61    Mem *pOut;.  a
41b0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
41c0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
41d0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p2<=(p->nMem-
41e0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
41f0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
4200: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d  [pOp->p2];.  mem
4210: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
4220: 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64   pOut);.  if( Vd
4230: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
4240: 74 29 20 29 20 73 71 6c 69 74 65 33 56 64 62 65  t) ) sqlite3Vdbe
4250: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
4260: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
4270: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74  = MEM_Int;.  ret
4280: 75 72 6e 20 70 4f 75 74 3b 0a 7d 0a 0a 0a 2f 2a  urn pOut;.}.../*
4290: 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d  .** Execute as m
42a0: 75 63 68 20 6f 66 20 61 20 56 44 42 45 20 70 72  uch of a VDBE pr
42b0: 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61 6e 2e  ogram as we can.
42c0: 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20  .** This is the 
42d0: 63 6f 72 65 20 6f 66 20 73 71 6c 69 74 65 33 5f  core of sqlite3_
42e0: 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e 74  step().  .*/.int
42f0: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
4300: 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20 20  (.  Vdbe *p     
4310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4320: 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b  * The VDBE */.){
4330: 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e  .  Op *aOp = p->
4340: 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  aOp;          /*
4350: 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20   Copy of p->aOp 
4360: 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20 3d 20 61  */.  Op *pOp = a
4370: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Op;             
4380: 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61  /* Current opera
4390: 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64 65 66 69  tion */.#if defi
43a0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
43b0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42  ) || defined(VDB
43c0: 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 4f 70 20  E_PROFILE).  Op 
43d0: 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20 20 20 20  *pOrigOp;       
43e0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
43f0: 20 6f 66 20 70 4f 70 20 61 74 20 74 68 65 20 74   of pOp at the t
4400: 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a  op of the loop *
4410: 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 72  /.#endif.  int r
4420: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20  c = SQLITE_OK;  
4430: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
4440: 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71  o return */.  sq
4450: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64  lite3 *db = p->d
4460: 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  b;       /* The 
4470: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38  database */.  u8
4480: 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
4490: 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65  ult = 0; /* Rese
44a0: 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61  t schema after a
44b0: 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74  n error if posit
44c0: 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f  ive */.  u8 enco
44d0: 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20  ding = ENC(db); 
44e0: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
44f0: 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ase encoding */.
4500: 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d    int iCompare =
4510: 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   0;          /* 
4520: 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f  Result of last O
4530: 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
4540: 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ion */.  unsigne
4550: 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20  d nVmStep = 0;  
4560: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
4570: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
4580: 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65   steps */.#ifnde
4590: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
45a0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
45b0: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
45c0: 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a  ressLimit = 0;/*
45d0: 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73   Invoke xProgres
45e0: 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70  s() when nVmStep
45f0: 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f   reaches this */
4600: 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61  .#endif.  Mem *a
4610: 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20  Mem = p->aMem;  
4620: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
4630: 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d  p->aMem */.  Mem
4640: 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20   *pIn1 = 0;     
4650: 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69          /* 1st i
4660: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
4670: 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b    Mem *pIn2 = 0;
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4690: 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  2nd input operan
46a0: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33  d */.  Mem *pIn3
46b0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
46c0: 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f    /* 3rd input o
46d0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
46e0: 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20  *pOut = 0;      
46f0: 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74         /* Output
4700: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e   operand */.  in
4710: 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  t *aPermute = 0;
4720: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d           /* Perm
4730: 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d  utation of colum
4740: 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72  ns for OP_Compar
4750: 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52  e */.  i64 lastR
4760: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
4770: 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64 20  owid;  /* Saved 
4780: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61 73  value of the las
4790: 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20 2a  t insert ROWID *
47a0: 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  /.#ifdef VDBE_PR
47b0: 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72  OFILE.  u64 star
47c0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
47d0: 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20     /* CPU clock 
47e0: 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f  count at start o
47f0: 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64  f opcode */.#end
4800: 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54  if.  /*** INSERT
4810: 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52   STACK UNION HER
4820: 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74  E ***/..  assert
4830: 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  ( p->magic==VDBE
4840: 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f  _MAGIC_RUN );  /
4850: 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  * sqlite3_step()
4860: 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a   verifies this *
4870: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45  /.  sqlite3VdbeE
4880: 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70  nter(p);.  if( p
4890: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ->rc==SQLITE_NOM
48a0: 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  EM ){.    /* Thi
48b0: 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d  s happens if a m
48c0: 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61  alloc() inside a
48d0: 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
48e0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f  _column_text() o
48f0: 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  r.    ** sqlite3
4900: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29  _column_text16()
4910: 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20   failed.  */.   
4920: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
4930: 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  }.  assert( p->r
4940: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
4950: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  p->rc==SQLITE_BU
4960: 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  SY );.  assert( 
4970: 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20  p->bIsReader || 
4980: 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29  p->readOnly!=0 )
4990: 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49  ;.  p->rc = SQLI
49a0: 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72  TE_OK;.  p->iCur
49b0: 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20  rentTime = 0;.  
49c0: 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61  assert( p->expla
49d0: 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52  in==0 );.  p->pR
49e0: 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20  esultSet = 0;.  
49f0: 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
4a00: 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28  nBusy = 0;.  if(
4a10: 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72   db->u1.isInterr
4a20: 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f  upted ) goto abo
4a30: 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72  rt_due_to_interr
4a40: 75 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  upt;.  sqlite3Vd
4a50: 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b  beIOTraceSql(p);
4a60: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4a70: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
4a80: 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d  LLBACK.  if( db-
4a90: 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20  >xProgress ){.  
4aa0: 20 20 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70    u32 iPrior = p
4ab0: 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
4ac0: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f  E_STMTSTATUS_VM_
4ad0: 53 54 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72  STEP];.    asser
4ae0: 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67  t( 0 < db->nProg
4af0: 72 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e  ressOps );.    n
4b00: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
4b10: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
4b20: 20 2d 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d   - (iPrior % db-
4b30: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
4b40: 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65    }.#endif.#ifde
4b50: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
4b60: 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
4b70: 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69  ignMalloc();.  i
4b80: 66 28 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26  f( p->pc==0.   &
4b90: 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  & (p->db->flags 
4ba0: 26 20 28 53 51 4c 49 54 45 5f 56 64 62 65 4c 69  & (SQLITE_VdbeLi
4bb0: 73 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62  sting|SQLITE_Vdb
4bc0: 65 45 51 50 7c 53 51 4c 49 54 45 5f 56 64 62 65  eEQP|SQLITE_Vdbe
4bd0: 54 72 61 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a  Trace))!=0.  ){.
4be0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69      int i;.    i
4bf0: 6e 74 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20  nt once = 1;.   
4c00: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4c10: 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 69 66 28  tSql(p);.    if(
4c20: 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20   p->db->flags & 
4c30: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
4c40: 6e 67 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e  ng ){.      prin
4c50: 74 66 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d  tf("VDBE Program
4c60: 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20   Listing:\n");. 
4c70: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
4c80: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
4c90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4ca0: 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
4cb0: 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20   i, &aOp[i]);.  
4cc0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
4cd0: 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  if( p->db->flags
4ce0: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51   & SQLITE_VdbeEQ
4cf0: 50 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69  P ){.      for(i
4d00: 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b  =0; i<p->nOp; i+
4d10: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
4d20: 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  aOp[i].opcode==O
4d30: 50 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20  P_Explain ){.   
4d40: 20 20 20 20 20 20 20 69 66 28 20 6f 6e 63 65 20         if( once 
4d50: 29 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 51  ) printf("VDBE Q
4d60: 75 65 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a  uery Plan:\n");.
4d70: 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66            printf
4d80: 28 22 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e  ("%s\n", aOp[i].
4d90: 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 20  p4.z);.         
4da0: 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20 20   once = 0;.     
4db0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
4dc0: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62   }.    if( p->db
4dd0: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4de0: 5f 56 64 62 65 54 72 61 63 65 20 29 20 20 70 72  _VdbeTrace )  pr
4df0: 69 6e 74 66 28 22 56 44 42 45 20 54 72 61 63 65  intf("VDBE Trace
4e00: 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  :\n");.  }.  sql
4e10: 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
4e20: 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  loc();.#endif.  
4e30: 66 6f 72 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e  for(pOp=&aOp[p->
4e40: 70 63 5d 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f  pc]; rc==SQLITE_
4e50: 4f 4b 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20 20  OK; pOp++){.    
4e60: 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f 70  assert( pOp>=aOp
4e70: 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e   && pOp<&aOp[p->
4e80: 6e 4f 70 5d 29 3b 0a 20 20 20 20 69 66 28 20 64  nOp]);.    if( d
4e90: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
4ea0: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23  ) goto no_mem;.#
4eb0: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4ec0: 4c 45 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73  LE.    start = s
4ed0: 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a  qlite3Hwtime();.
4ee0: 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74  #endif.    nVmSt
4ef0: 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c  ep++;.#ifdef SQL
4f00: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
4f10: 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 69  SCANSTATUS.    i
4f20: 66 28 20 70 2d 3e 61 6e 45 78 65 63 20 29 20 70  f( p->anExec ) p
4f30: 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29 28 70  ->anExec[(int)(p
4f40: 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64  Op-aOp)]++;.#end
4f50: 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20  if..    /* Only 
4f60: 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66  allow tracing if
4f70: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73   SQLITE_DEBUG is
4f80: 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
4f90: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
4fa0: 45 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d  EBUG.    if( db-
4fb0: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
4fc0: 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20  VdbeTrace ){.   
4fd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4fe0: 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 28 69  intOp(stdout, (i
4ff0: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20  nt)(pOp - aOp), 
5000: 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  pOp);.    }.#end
5010: 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f  if.      ..    /
5020: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
5030: 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d  f we need to sim
5040: 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75  ulate an interru
5050: 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68  pt.  This only h
5060: 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66  appens.    ** if
5070: 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69   we have a speci
5080: 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20  al test build.. 
5090: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
50a0: 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28  ITE_TEST.    if(
50b0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
50c0: 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20  pt_count>0 ){.  
50d0: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65      sqlite3_inte
50e0: 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20  rrupt_count--;. 
50f0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
5100: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
5110: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
5120: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5130: 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  (db);.      }.  
5140: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
5150: 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69  /* Sanity checki
5160: 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72  ng on other oper
5170: 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ands */.#ifdef S
5180: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
5190: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66  assert( pOp->opf
51a0: 6c 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63  lags==sqlite3Opc
51b0: 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d  odeProperty[pOp-
51c0: 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20  >opcode] );.    
51d0: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
51e0: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d  s & OPFLG_IN1)!=
51f0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5200: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
5210: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5220: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p1<=(p->nMem-
5230: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5240: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
5250: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
5260: 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20  p->p1]) );.     
5270: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
5280: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
5290: 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70  riants(&aMem[pOp
52a0: 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p1]) );.      
52b0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
52c0: 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p1, &aMem[pO
52d0: 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p1]);.    }. 
52e0: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
52f0: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32  lags & OPFLG_IN2
5300: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5310: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5320: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5330: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
5340: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
5350: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5360: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
5370: 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20  [pOp->p2]) );.  
5380: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
5390: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
53a0: 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b  nvariants(&aMem[
53b0: 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20  pOp->p2]) );.   
53c0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
53d0: 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  E(pOp->p2, &aMem
53e0: 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
53f0: 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  }.    if( (pOp->
5400: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
5410: 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN3)!=0 ){.     
5420: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5430: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5440: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
5450: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
5460: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
5470: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5480: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
5490: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
54a0: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
54b0: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
54c0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
54d0: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
54e0: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
54f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
5500: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
5510: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5520: 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20  LG_OUT2)!=0 ){. 
5530: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5540: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
5550: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5560: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5570: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d  rsor) );.      m
5580: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
5590: 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  p, &aMem[pOp->p2
55a0: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
55b0: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
55c0: 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30  & OPFLG_OUT3)!=0
55d0: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
55e0: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
55f0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5600: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
5610: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
5620: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
5630: 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
5640: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23  p->p3]);.    }.#
5650: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
5660: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
5670: 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f  || defined(VDBE_
5680: 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f 72  PROFILE).    pOr
5690: 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64  igOp = pOp;.#end
56a0: 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68  if.  .    switch
56b0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
56c0: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
56d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5700: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5710: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
5720: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
5730: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
5740: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
5750: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
5760: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
5770: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
5780: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
5790: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
57a0: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
57b0: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
57c0: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
57d0: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
57e0: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
57f0: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
5800: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
5810: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
5820: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
5830: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
5840: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5850: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
5860: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
5870: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
5880: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
5890: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
58a0: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
58b0: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
58c0: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
58d0: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
58e0: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
58f0: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
5900: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
5910: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
5920: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
5930: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
5940: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
5950: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
5960: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
5970: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
5980: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
5990: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
59a0: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
59b0: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
59c0: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
59d0: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
59e0: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
59f0: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
5a00: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
5a10: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
5a20: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
5a30: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
5a40: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
5a50: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
5a60: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
5a70: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
5a80: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
5a90: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
5aa0: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
5ab0: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
5ac0: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
5ad0: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
5ae0: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
5af0: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
5b00: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
5b10: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
5b20: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
5b30: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
5b40: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
5b50: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
5b60: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
5b70: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
5b80: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
5b90: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
5ba0: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
5bb0: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
5bc0: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
5bd0: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
5be0: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
5bf0: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
5c00: 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a  ut2, out3.  See.
5c10: 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68  ** the mkopcodeh
5c20: 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20  .awk script for 
5c30: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
5c40: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f  mation..**.** Do
5c50: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75  cumentation abou
5c60: 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69  t VDBE opcodes i
5c70: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73  s generated by s
5c80: 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c  canning this fil
5c90: 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f  e.** for lines o
5ca0: 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22  f that contain "
5cb0: 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20  Opcode:".  That 
5cc0: 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62  line and all sub
5cd0: 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65  sequent.** comme
5ce0: 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65  nt lines are use
5cf0: 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
5d00: 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  ion of the opcod
5d10: 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61  e.html documenta
5d20: 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a  tion.** file..**
5d30: 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a  .** SUMMARY:.**.
5d40: 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e  **     Formattin
5d50: 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  g is important t
5d60: 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73  o scripts that s
5d70: 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a  can this file..*
5d80: 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76  *     Do not dev
5d90: 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f  iate from the fo
5da0: 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63  rmatting style c
5db0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e  urrently in use.
5dc0: 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .**.************
5dd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5de0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5df0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e10: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  */../* Opcode:  
5e20: 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a  Goto * P2 * * *.
5e30: 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69  **.** An uncondi
5e40: 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61  tional jump to a
5e50: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68  ddress P2..** Th
5e60: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
5e70: 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c  on executed will
5e80: 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20   be .** the one 
5e90: 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d  at index P2 from
5ea0: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
5eb0: 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d  f.** the program
5ec0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70  ..**.** The P1 p
5ed0: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
5ee0: 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79  actually used by
5ef0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48   this opcode.  H
5f00: 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73  owever, it.** is
5f10: 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74   sometimes set t
5f20: 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30  o 1 instead of 0
5f30: 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   as a hint to th
5f40: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73  e command-line s
5f50: 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69  hell.** that thi
5f60: 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f  s Goto is the bo
5f70: 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61  ttom of a loop a
5f80: 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65  nd that the line
5f90: 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a  s from P2 down.*
5fa0: 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  * to the current
5fb0: 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20   line should be 
5fc0: 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50  indented for EXP
5fd0: 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  LAIN output..*/.
5fe0: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6000: 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70  ump */.jump_to_p
6010: 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
6020: 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f 70  interrupt:.  pOp
6030: 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
6040: 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f  - 1];..  /* Opco
6050: 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65  des that are use
6060: 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  d as the bottom 
6070: 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65  of a loop (OP_Ne
6080: 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a  xt, OP_Prev,.  *
6090: 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52  * OP_VNext, OP_R
60a0: 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50  owSetNext, or OP
60b0: 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c 6c  _SorterNext) all
60c0: 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a   jump here upon.
60d0: 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e    ** completion.
60e0: 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69    Check to see i
60f0: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
6100: 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20 63  upt() has been c
6110: 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66  alled.  ** or if
6120: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
6130: 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f 20  llback needs to 
6140: 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a  be invoked. .  *
6150: 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64 65  *.  ** This code
6160: 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75 72   uses unstructur
6170: 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65 6d  ed "goto" statem
6180: 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f  ents and does no
6190: 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20  t look clean..  
61a0: 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20 6e  ** But that is n
61b0: 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70 79  ot due to sloppy
61c0: 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e 20   coding habits. 
61d0: 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69 74  The code is writ
61e0: 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77 61  ten this.  ** wa
61f0: 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63  y for performanc
6200: 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76 69  e, to avoid havi
6210: 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69 6e  ng to run the in
6220: 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f 67  terrupt and prog
6230: 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73  ress.  ** checks
6240: 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64 65   on every opcode
6250: 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73 71  .  This helps sq
6260: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f 20  lite3_step() to 
6270: 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a 20  run about 1.5%. 
6280: 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f 72   ** faster accor
6290: 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69 6e  ding to "valgrin
62a0: 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72  d --tool=cachegr
62b0: 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f  ind" */.check_fo
62c0: 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 69  r_interrupt:.  i
62d0: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
62e0: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
62f0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
6300: 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20 53  rrupt;.#ifndef S
6310: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
6320: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
6330: 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72  * Call the progr
6340: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20  ess callback if 
6350: 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  it is configured
6360: 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65   and the require
6370: 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66  d number.  ** of
6380: 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62   VDBE ops have b
6390: 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69  een executed (ei
63a0: 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20  ther since this 
63b0: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20  invocation of.  
63c0: 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  ** sqlite3VdbeEx
63d0: 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61  ec() or since la
63e0: 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67  st time the prog
63f0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61  ress callback wa
6400: 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20  s called)..  ** 
6410: 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  If the progress 
6420: 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73  callback returns
6430: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20   non-zero, exit 
6440: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
6450: 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61 20  ine with.  ** a 
6460: 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49  return code SQLI
6470: 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20  TE_ABORT..  */. 
6480: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
6490: 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74 65 70  ss!=0 && nVmStep
64a0: 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  >=nProgressLimit
64b0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
64c0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
64d0: 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67  !=0 );.    nProg
64e0: 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53  ressLimit = nVmS
64f0: 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72  tep + db->nProgr
6500: 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65  essOps - (nVmSte
6510: 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  p%db->nProgressO
6520: 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  ps);.    if( db-
6530: 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70  >xProgress(db->p
6540: 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b 0a  ProgressArg) ){.
6550: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
6560: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
6570: 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72     goto vdbe_err
6580: 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 7d 0a 20  or_halt;.    }. 
6590: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62   }.#endif.  .  b
65a0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
65b0: 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32  de:  Gosub P1 P2
65c0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
65d0: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 61  te the current a
65e0: 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69  ddress onto regi
65f0: 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74  ster P1.** and t
6600: 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  hen jump to addr
6610: 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ess P2..*/.case 
6620: 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20  OP_Gosub: {     
6630: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
6640: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
6650: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
6660: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
6670: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31  ursor) );.  pIn1
6680: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6690: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62  ];.  assert( Vdb
66a0: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31  eMemDynamic(pIn1
66b0: 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f  )==0 );.  memAbo
66c0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
66d0: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  n1);.  pIn1->fla
66e0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
66f0: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74  pIn1->u.i = (int
6700: 29 28 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45  )(pOp-aOp);.  RE
6710: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6720: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20  ->p1, pIn1);..  
6730: 2f 2a 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65  /* Most jump ope
6740: 72 61 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74  rations do a got
6750: 6f 20 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69  o to this spot i
6760: 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74  n order to updat
6770: 65 0a 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70  e.  ** the pOp p
6780: 6f 69 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f  ointer. */.jump_
6790: 74 6f 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26  to_p2:.  pOp = &
67a0: 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d  aOp[pOp->p2 - 1]
67b0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
67c0: 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e   Opcode:  Return
67d0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
67e0: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65  * Jump to the ne
67f0: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
6800: 66 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73  fter the address
6810: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
6820: 20 20 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a    After.** the j
6830: 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31  ump, register P1
6840: 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e   becomes undefin
6850: 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ed..*/.case OP_R
6860: 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20  eturn: {        
6870: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
6880: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
6890: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
68a0: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
68b0: 5f 49 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20  _Int );.  pOp = 
68c0: 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b  &aOp[pIn1->u.i];
68d0: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
68e0: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
68f0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6900: 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75  pcode: InitCorou
6910: 74 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20  tine P1 P2 P3 * 
6920: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72  *.**.** Set up r
6930: 65 67 69 73 74 65 72 20 50 31 20 73 6f 20 74 68  egister P1 so th
6940: 61 74 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64  at it will Yield
6950: 20 74 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e   to the coroutin
6960: 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20  e.** located at 
6970: 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a  address P3..**.*
6980: 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20  * If P2!=0 then 
6990: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d  the coroutine im
69a0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d  plementation imm
69b0: 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73  ediately follows
69c0: 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  .** this opcode.
69d0: 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74    So jump over t
69e0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70  he coroutine imp
69f0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a  lementation to.*
6a00: 2a 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a  * address P2..**
6a10: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e  .** See also: En
6a20: 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  dCoroutine.*/.ca
6a30: 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74  se OP_InitCorout
6a40: 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75  ine: {     /* ju
6a50: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6a60: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f  pOp->p1>0 &&  pO
6a70: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p1<=(p->nMem-
6a80: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
6a90: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
6aa0: 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  >=0 && pOp->p2<p
6ab0: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65 72  ->nOp );.  asser
6ac0: 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26  t( pOp->p3>=0 &&
6ad0: 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20   pOp->p3<p->nOp 
6ae0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
6af0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
6b00: 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d 44 79  sert( !VdbeMemDy
6b10: 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a 20  namic(pOut) );. 
6b20: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70   pOut->u.i = pOp
6b30: 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75 74  ->p3 - 1;.  pOut
6b40: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
6b50: 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  t;.  if( pOp->p2
6b60: 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
6b70: 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
6b80: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e 64 43  /* Opcode:  EndC
6b90: 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20 2a 20  oroutine P1 * * 
6ba0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e  * *.**.** The in
6bb0: 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74 68 65  struction at the
6bc0: 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69   address in regi
6bd0: 73 74 65 72 20 50 31 20 69 73 20 61 20 59 69 65  ster P1 is a Yie
6be0: 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  ld..** Jump to t
6bf0: 68 65 20 50 32 20 70 61 72 61 6d 65 74 65 72 20  he P2 parameter 
6c00: 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e 0a 2a  of that Yield..*
6c10: 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75 6d 70  * After the jump
6c20: 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65  , register P1 be
6c30: 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e  comes undefined.
6c40: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
6c50: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a   InitCoroutine.*
6c60: 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f 72  /.case OP_EndCor
6c70: 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 20 20  outine: {       
6c80: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
6c90: 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72 3b  VdbeOp *pCaller;
6ca0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
6cb0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6cc0: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d  rt( pIn1->flags=
6cd0: 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73  =MEM_Int );.  as
6ce0: 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69 3e  sert( pIn1->u.i>
6cf0: 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69 3c  =0 && pIn1->u.i<
6d00: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61 6c  p->nOp );.  pCal
6d10: 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d  ler = &aOp[pIn1-
6d20: 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  >u.i];.  assert(
6d30: 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65   pCaller->opcode
6d40: 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20 20  ==OP_Yield );.  
6d50: 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d  assert( pCaller-
6d60: 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c 65  >p2>=0 && pCalle
6d70: 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  r->p2<p->nOp );.
6d80: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 43 61    pOp = &aOp[pCa
6d90: 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20  ller->p2 - 1];. 
6da0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6db0: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
6dc0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6dd0: 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20 50  ode:  Yield P1 P
6de0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77  2 * * *.**.** Sw
6df0: 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63  ap the program c
6e00: 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68 65 20  ounter with the 
6e10: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
6e20: 72 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68  r P1.  This.** h
6e30: 61 73 20 74 68 65 20 65 66 66 65 63 74 20 6f 66  as the effect of
6e40: 20 79 69 65 6c 64 69 6e 67 20 74 6f 20 61 20 63   yielding to a c
6e50: 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20  oroutine..**.** 
6e60: 49 66 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  If the coroutine
6e70: 20 74 68 61 74 20 69 73 20 6c 61 75 6e 63 68 65   that is launche
6e80: 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  d by this instru
6e90: 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a  ction ends with.
6ea0: 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52 65 74 75  ** Yield or Retu
6eb0: 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65  rn then continue
6ec0: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
6ed0: 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
6ee0: 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74 69  f.** the corouti
6ef0: 6e 65 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74  ne launched by t
6f00: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
6f10: 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64  ends with.** End
6f20: 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20  Coroutine, then 
6f30: 6a 75 6d 70 20 74 6f 20 50 32 20 72 61 74 68 65  jump to P2 rathe
6f40: 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e  r than continuin
6f50: 67 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65  g with the.** ne
6f60: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
6f70: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
6f80: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f  InitCoroutine.*/
6f90: 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20  .case OP_Yield: 
6fa0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
6fb0: 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69  in1, jump */.  i
6fc0: 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e  nt pcDest;.  pIn
6fd0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
6fe0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64  1];.  assert( Vd
6ff0: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e  beMemDynamic(pIn
7000: 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d  1)==0 );.  pIn1-
7010: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
7020: 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e  ;.  pcDest = (in
7030: 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70  t)pIn1->u.i;.  p
7040: 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29  In1->u.i = (int)
7050: 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 52  (pOp - aOp);.  R
7060: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
7070: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
7080: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 44 65 73  pOp = &aOp[pcDes
7090: 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t];.  break;.}..
70a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
70b0: 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33  IfNull  P1 P2 P3
70c0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
70d0: 69 73 3a 20 20 69 66 20 72 5b 50 33 5d 3d 6e 75  is:  if r[P3]=nu
70e0: 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68  ll halt.**.** Ch
70f0: 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e  eck the value in
7100: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49   register P3.  I
7110: 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65  f it is NULL the
7120: 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20  n Halt using.** 
7130: 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32  parameter P1, P2
7140: 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74  , and P4 as if t
7150: 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20  his were a Halt 
7160: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
7170: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
7180: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
7190: 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
71a0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
71b0: 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50   no-op..** The P
71c0: 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75  5 parameter shou
71d0: 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65  ld be 1..*/.case
71e0: 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20   OP_HaltIfNull: 
71f0: 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f  {      /* in3 */
7200: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
7210: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
7220: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
7230: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72  EM_Null)==0 ) br
7240: 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
7250: 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48  hrough into OP_H
7260: 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63  alt */.}../* Opc
7270: 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32  ode:  Halt P1 P2
7280: 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45   * P4 P5.**.** E
7290: 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  xit immediately.
72a0: 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f    All open curso
72b0: 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73  rs, etc are clos
72c0: 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61  ed.** automatica
72d0: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  lly..**.** P1 is
72e0: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65   the result code
72f0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
7300: 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c  ite3_exec(), sql
7310: 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a  ite3_reset(),.**
7320: 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61   or sqlite3_fina
7330: 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e  lize().  For a n
7340: 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73  ormal halt, this
7350: 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54   should be SQLIT
7360: 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72  E_OK (0)..** For
7370: 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20   errors, it can 
7380: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61  be some other va
7390: 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74  lue.  If P1!=0 t
73a0: 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65  hen P2 will dete
73b0: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
73c0: 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62   or not to rollb
73d0: 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  ack the current 
73e0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f  transaction.  Do
73f0: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a   not rollback.**
7400: 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e   if P2==OE_Fail.
7410: 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   Do the rollback
7420: 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62   if P2==OE_Rollb
7430: 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f  ack.  If P2==OE_
7440: 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62  Abort,.** then b
7450: 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e  ack out all chan
7460: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63  ges that have oc
7470: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68  curred during th
7480: 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  is execution of 
7490: 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74  the.** VDBE, but
74a0: 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   do not rollback
74b0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
74c0: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  . .**.** If P4 i
74d0: 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20  s not null then 
74e0: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d  it is an error m
74f0: 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a  essage string..*
7500: 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c  *.** P5 is a val
7510: 75 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64  ue between 0 and
7520: 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74   4, inclusive, t
7530: 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65  hat modifies the
7540: 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a   P4 string..**.*
7550: 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61  *    0:  (no cha
7560: 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e  nge).**    1:  N
7570: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e  OT NULL contrain
7580: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
7590: 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f     2:  UNIQUE co
75a0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
75b0: 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48   P4.**    3:  CH
75c0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ECK constraint f
75d0: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
75e0: 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  4:  FOREIGN KEY 
75f0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7600: 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50  d: P4.**.** If P
7610: 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e  5 is not zero an
7620: 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68  d P4 is NULL, th
7630: 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61 66  en everything af
7640: 74 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a  ter the ":" is.*
7650: 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a  * omitted..**.**
7660: 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70   There is an imp
7670: 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30  lied "Halt 0 0 0
7680: 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  " instruction in
7690: 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65  serted at the ve
76a0: 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65  ry end of.** eve
76b0: 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20  ry program.  So 
76c0: 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20  a jump past the 
76d0: 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  last instruction
76e0: 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a   of the program.
76f0: 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  ** is the same a
7700: 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74  s executing Halt
7710: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
7720: 74 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  t: {.  const cha
7730: 72 20 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73  r *zType;.  cons
7740: 74 20 63 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b  t char *zLogFmt;
7750: 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
7760: 72 61 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b  rame;.  int pcx;
7770: 0a 0a 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28  ..  pcx = (int)(
7780: 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 69 66  pOp - aOp);.  if
7790: 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54  ( pOp->p1==SQLIT
77a0: 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d  E_OK && p->pFram
77b0: 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74  e ){.    /* Halt
77c0: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
77d0: 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c  . Return control
77e0: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66   to the parent f
77f0: 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72  rame. */.    pFr
7800: 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
7810: 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  .    p->pFrame =
7820: 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
7830: 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d  ;.    p->nFrame-
7840: 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  -;.    sqlite3Vd
7850: 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
7860: 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
7870: 20 20 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56    pcx = sqlite3V
7880: 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28  dbeFrameRestore(
7890: 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73  pFrame);.    las
78a0: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
78b0: 74 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20  tRowid;.    if( 
78c0: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p2==OE_Igno
78d0: 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  re ){.      /* I
78e0: 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69  nstruction pcx i
78f0: 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d  s the OP_Program
7900: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
7910: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20  e sub-program . 
7920: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c       ** currentl
7930: 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20  y being halted. 
7940: 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75  If the p2 instru
7950: 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50  ction of this OP
7960: 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69  _Halt.      ** i
7970: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65  nstruction is se
7980: 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  t to OE_Ignore, 
7990: 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f  then the sub-pro
79a0: 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67  gram is throwing
79b0: 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e  .      ** an IGN
79c0: 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49  ORE exception. I
79d0: 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70  n this case jump
79e0: 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20   to the address 
79f0: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
7a00: 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20  ** as the p2 of 
7a10: 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  the calling OP_P
7a20: 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20  rogram.  */.    
7a30: 20 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70    pcx = p->aOp[p
7a40: 63 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a  cx].p2-1;.    }.
7a50: 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70      aOp = p->aOp
7a60: 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e  ;.    aMem = p->
7a70: 61 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20  aMem;.    pOp = 
7a80: 26 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62  &aOp[pcx];.    b
7a90: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72  reak;.  }.  p->r
7aa0: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
7ab0: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
7ac0: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
7ad0: 2d 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20 69 66  ->pc = pcx;.  if
7ae0: 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69  ( p->rc ){.    i
7af0: 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
7b00: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
7b10: 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a   char * const az
7b20: 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20  Type[] = { "NOT 
7b30: 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c  NULL", "UNIQUE",
7b40: 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20   "CHECK",.      
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b70: 20 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20         "FOREIGN 
7b80: 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 61 73  KEY" };.      as
7b90: 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31  sert( pOp->p5>=1
7ba0: 20 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29   && pOp->p5<=4 )
7bb0: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
7bc0: 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a  ( pOp->p5==1 );.
7bd0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
7be0: 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20  pOp->p5==2 );.  
7bf0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
7c00: 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20  p->p5==3 );.    
7c10: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7c20: 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20  >p5==4 );.      
7c30: 7a 54 79 70 65 20 3d 20 61 7a 54 79 70 65 5b 70  zType = azType[p
7c40: 4f 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d  Op->p5-1];.    }
7c50: 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 54 79 70  else{.      zTyp
7c60: 65 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  e = 0;.    }.   
7c70: 20 61 73 73 65 72 74 28 20 7a 54 79 70 65 21 3d   assert( zType!=
7c80: 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  0 || pOp->p4.z!=
7c90: 30 20 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74  0 );.    zLogFmt
7ca0: 20 3d 20 22 61 62 6f 72 74 20 61 74 20 25 64 20   = "abort at %d 
7cb0: 69 6e 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20  in [%s]: %s";.  
7cc0: 20 20 69 66 28 20 7a 54 79 70 65 20 26 26 20 70    if( zType && p
7cd0: 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
7ce0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
7cf0: 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74 72  or(p, "%s constr
7d00: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 25 73 22  aint failed: %s"
7d10: 2c 20 7a 54 79 70 65 2c 20 70 4f 70 2d 3e 70 34  , zType, pOp->p4
7d20: 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  .z);.    }else i
7d30: 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  f( pOp->p4.z ){.
7d40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7d50: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
7d60: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
7d70: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
7d80: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
7d90: 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20   "%s constraint 
7da0: 66 61 69 6c 65 64 22 2c 20 7a 54 79 70 65 29 3b  failed", zType);
7db0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
7dc0: 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20  e3_log(pOp->p1, 
7dd0: 7a 4c 6f 67 46 6d 74 2c 20 70 63 78 2c 20 70 2d  zLogFmt, pcx, p-
7de0: 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73  >zSql, p->zErrMs
7df0: 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  g);.  }.  rc = s
7e00: 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
7e10: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
7e20: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20  =SQLITE_BUSY || 
7e30: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
7e40: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f   rc==SQLITE_ERRO
7e50: 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  R );.  if( rc==S
7e60: 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
7e70: 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
7e80: 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
7e90: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
7ea0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7eb0: 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d  | (p->rc&0xff)==
7ec0: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
7ed0: 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  T );.    assert(
7ee0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7ef0: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  | db->nDeferredC
7f00: 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65  ons>0 || db->nDe
7f10: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20  ferredImmCons>0 
7f20: 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72  );.    rc = p->r
7f30: 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c ? SQLITE_ERROR
7f40: 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   : SQLITE_DONE;.
7f50: 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
7f60: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
7f70: 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31  code: Integer P1
7f80: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
7f90: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a  opsis: r[P2]=P1.
7fa0: 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74  **.** The 32-bit
7fb0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
7fc0: 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74  1 is written int
7fd0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
7fe0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65  /.case OP_Intege
7ff0: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  r: {         /* 
8000: 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d  out2 */.  pOut =
8010: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
8020: 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
8030: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  >u.i = pOp->p1;.
8040: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
8050: 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50  pcode: Int64 * P
8060: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
8070: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a  psis: r[P2]=P4.*
8080: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
8090: 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74  nter to a 64-bit
80a0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a   integer value..
80b0: 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61  ** Write that va
80c0: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
80d0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
80e0: 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20  _Int64: {       
80f0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
8100: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
8110: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
8120: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8130: 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70  4.pI64!=0 );.  p
8140: 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d  Out->u.i = *pOp-
8150: 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61  >p4.pI64;.  brea
8160: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
8170: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
8180: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
8190: 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20  de: Real * P2 * 
81a0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
81b0: 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a  : r[P2]=P4.**.**
81c0: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
81d0: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f   to a 64-bit flo
81e0: 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
81f0: 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74  e..** Write that
8200: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
8210: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8220: 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20   OP_Real: {     
8230: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
8240: 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32  s TK_FLOAT, out2
8250: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   */.  pOut = out
8260: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
8270: 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  Op);.  pOut->fla
8280: 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20  gs = MEM_Real;. 
8290: 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65   assert( !sqlite
82a0: 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e  3IsNaN(*pOp->p4.
82b0: 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74  pReal) );.  pOut
82c0: 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34  ->u.r = *pOp->p4
82d0: 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b  .pReal;.  break;
82e0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
82f0: 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20  code: String8 * 
8300: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
8310: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34  opsis: r[P2]='P4
8320: 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  '.**.** P4 point
8330: 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69  s to a nul termi
8340: 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
8350: 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ng. This opcode 
8360: 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a  is transformed .
8370: 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67  ** into a String
8380: 20 6f 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69   opcode before i
8390: 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f  t is executed fo
83a0: 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65  r the first time
83b0: 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69  .  During.** thi
83c0: 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  s transformation
83d0: 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  , the length of 
83e0: 73 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d  string P4 is com
83f0: 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64  puted and stored
8400: 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70 61  .** as the P1 pa
8410: 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65  rameter..*/.case
8420: 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20   OP_String8: {  
8430: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
8440: 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74  s TK_STRING, out
8450: 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
8460: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
8470: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
8480: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
8490: 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
84a0: 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70  OP_String;.  pOp
84b0: 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74  ->p1 = sqlite3St
84c0: 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a  rlen30(pOp->p4.z
84d0: 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
84e0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
84f0: 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51  if( encoding!=SQ
8500: 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20  LITE_UTF8 ){.   
8510: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
8520: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
8530: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20   pOp->p4.z, -1, 
8540: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
8550: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
8560: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
8570: 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f  TOOBIG ) goto to
8580: 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53  o_big;.    if( S
8590: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
85a0: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
85b0: 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
85c0: 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ng) ) goto no_me
85d0: 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
85e0: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20  Out->szMalloc>0 
85f0: 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63  && pOut->zMalloc
8600: 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20  ==pOut->z );.   
8610: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
8620: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30  Dynamic(pOut)==0
8630: 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a   );.    pOut->sz
8640: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
8650: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
8660: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69  EM_Static;.    i
8670: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
8680: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
8690: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
86a0: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
86b0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
86c0: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
86d0: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
86e0: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
86f0: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
8700: 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t->n;.  }.#endif
8710: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64  .  if( pOp->p1>d
8720: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
8730: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
8740: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
8750: 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c  ig;.  }.  /* Fal
8760: 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
8770: 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53   next case, OP_S
8780: 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a  tring */.}.  ./*
8790: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20   Opcode: String 
87a0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
87b0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
87c0: 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a  ]='P4' (len=P1).
87d0: 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  **.** The string
87e0: 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e   value P4 of len
87f0: 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69  gth P1 (bytes) i
8800: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
8810: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
8820: 66 20 50 35 21 3d 30 20 61 6e 64 20 74 68 65 20  f P5!=0 and the 
8830: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
8840: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
8850: 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65  r than zero, the
8860: 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70  n.** the datatyp
8870: 65 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65  e of the registe
8880: 72 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65  r P2 is converte
8890: 64 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20  d to BLOB.  The 
88a0: 63 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68  content is.** th
88b0: 65 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20  e same sequence 
88c0: 6f 66 20 62 79 74 65 73 2c 20 69 74 20 69 73 20  of bytes, it is 
88d0: 6d 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74  merely interpret
88e0: 65 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73  ed as a BLOB ins
88f0: 74 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72  tead.** of a str
8900: 69 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68 61  ing, as if it ha
8910: 64 20 62 65 65 6e 20 43 41 53 54 2e 0a 2a 2f 0a  d been CAST..*/.
8920: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20  case OP_String: 
8930: 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
8940: 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t2 */.  assert( 
8950: 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a  pOp->p4.z!=0 );.
8960: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
8970: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
8980: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
8990: 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
89a0: 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
89b0: 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70  pOut->z = pOp->p
89c0: 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  4.z;.  pOut->n =
89d0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74   pOp->p1;.  pOut
89e0: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
89f0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
8a00: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
8a10: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
8a20: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
8a30: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 61 73 73  >p3>0 );.    ass
8a40: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
8a50: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
8a60: 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d  r) );.    pIn3 =
8a70: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
8a80: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
8a90: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
8aa0: 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49  nt );.    if( pI
8ab0: 6e 33 2d 3e 75 2e 69 20 29 20 70 4f 75 74 2d 3e  n3->u.i ) pOut->
8ac0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
8ad0: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
8ae0: 54 65 72 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Term;.  }.  brea
8af0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8b00: 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a   Null P1 P2 P3 *
8b10: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8b20: 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a   r[P2..P3]=NULL.
8b30: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55  **.** Write a NU
8b40: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
8b50: 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65  s P2.  If P3 gre
8b60: 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68  ater than P2, th
8b70: 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a  en also write.**
8b80: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
8b90: 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 79  ter P3 and every
8ba0: 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74   register in bet
8bb0: 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20  ween P2 and P3. 
8bc0: 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73   If P3.** is les
8bd0: 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63  s than P2 (typic
8be0: 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29  ally P3 is zero)
8bf0: 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73   then only regis
8c00: 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74  ter P2 is.** set
8c10: 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   to NULL..**.** 
8c20: 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  If the P1 value 
8c30: 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
8c40: 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d  n also set the M
8c50: 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20  EM_Cleared flag 
8c60: 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20  so that.** NULL 
8c70: 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20  values will not 
8c80: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76  compare equal ev
8c90: 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c  en if SQLITE_NUL
8ca0: 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a  LEQ is set on.**
8cb0: 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e   OP_Ne or OP_Eq.
8cc0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
8cd0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
8ce0: 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63   out2 */.  int c
8cf0: 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c  nt;.  u16 nullFl
8d00: 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  ag;.  pOut = out
8d10: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
8d20: 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70  Op);.  cnt = pOp
8d30: 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20  ->p3-pOp->p2;.  
8d40: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
8d50: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
8d60: 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
8d70: 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61  >flags = nullFla
8d80: 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d  g = pOp->p1 ? (M
8d90: 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61  EM_Null|MEM_Clea
8da0: 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b  red) : MEM_Null;
8db0: 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20  .  while( cnt>0 
8dc0: 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  ){.    pOut++;. 
8dd0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
8de0: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
8df0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8e00: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
8e10: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
8e20: 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63   nullFlag;.    c
8e30: 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  nt--;.  }.  brea
8e40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8e50: 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a   SoftNull P1 * *
8e60: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8e70: 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a  :  r[P1]=NULL.**
8e80: 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65 72  .** Set register
8e90: 20 50 31 20 74 6f 20 68 61 76 65 20 74 68 65 20   P1 to have the 
8ea0: 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65  value NULL as se
8eb0: 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b  en by the OP_Mak
8ec0: 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72  eRecord.** instr
8ed0: 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e  uction, but do n
8ee0: 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74 72 69  ot free any stri
8ef0: 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72  ng or blob memor
8f00: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
8f10: 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65  h.** the registe
8f20: 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74 68  r, so that if th
8f30: 65 20 76 61 6c 75 65 20 77 61 73 20 61 20 73 74  e value was a st
8f40: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61  ring or blob tha
8f50: 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  t was.** previou
8f60: 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67  sly copied using
8f70: 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63   OP_SCopy, the c
8f80: 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69  opies will conti
8f90: 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e  nue to be valid.
8fa0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74  .*/.case OP_Soft
8fb0: 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74  Null: {.  assert
8fc0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
8fd0: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
8fe0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
8ff0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
9000: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d  Op->p1];.  pOut-
9010: 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e  >flags = (pOut->
9020: 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26  flags|MEM_Null)&
9030: 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a  ~MEM_Undefined;.
9040: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9050: 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50  pcode: Blob P1 P
9060: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
9070: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28  psis: r[P2]=P4 (
9080: 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34  len=P1).**.** P4
9090: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f   points to a blo
90a0: 62 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74  b of data P1 byt
90b0: 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20  es long.  Store 
90c0: 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20  this.** blob in 
90d0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
90e0: 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20  case OP_Blob: { 
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9100: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65  * out2 */.  asse
9110: 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53  rt( pOp->p1 <= S
9120: 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
9130: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
9140: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
9150: 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Op);.  sqlite3Vd
9160: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
9170: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70  , pOp->p4.z, pOp
9180: 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70  ->p1, 0, 0);.  p
9190: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
91a0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
91b0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
91c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
91d0: 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c   Opcode: Variabl
91e0: 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  e P1 P2 * P4 *.*
91f0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
9200: 5d 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50  ]=parameter(P1,P
9210: 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65  4).**.** Transfe
9220: 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  r the values of 
9230: 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20  bound parameter 
9240: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
9250: 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65   P2.**.** If the
9260: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61   parameter is na
9270: 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61  med, then its na
9280: 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34  me appears in P4
9290: 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  ..** The P4 valu
92a0: 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c  e is used by sql
92b0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
92c0: 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63  ter_name()..*/.c
92d0: 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a  ase OP_Variable:
92e0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
92f0: 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a   out2 */.  Mem *
9300: 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56  pVar;       /* V
9310: 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73  alue being trans
9320: 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73  ferred */..  ass
9330: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
9340: 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56  & pOp->p1<=p->nV
9350: 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ar );.  assert( 
9360: 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20  pOp->p4.z==0 || 
9370: 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61 7a  pOp->p4.z==p->az
9380: 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20 29  Var[pOp->p1-1] )
9390: 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61  ;.  pVar = &p->a
93a0: 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d  Var[pOp->p1 - 1]
93b0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
93c0: 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61  dbeMemTooBig(pVa
93d0: 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  r) ){.    goto t
93e0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f  oo_big;.  }.  pO
93f0: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
9400: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73  ase(p, pOp);.  s
9410: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
9420: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
9430: 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Var, MEM_Static)
9440: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
9450: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9460: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9470: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
9480: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
9490: 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72  sis:  r[P2@P3]=r
94a0: 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f  [P1@P3].**.** Mo
94b0: 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73  ve the P3 values
94c0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
94d0: 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e  .P1+P3-1 over in
94e0: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
94f0: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65  P2..P2+P3-1.  Re
9500: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
9510: 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  3-1 are.** left 
9520: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
9530: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
9540: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
9550: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
9560: 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33  -1 and P2..P2+P3
9570: 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20  -1 to overlap.  
9580: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a  It is an error.*
9590: 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c  * for P3 to be l
95a0: 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63  ess than 1..*/.c
95b0: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
95c0: 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
95d0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
95e0: 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f  egisters left to
95f0: 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70   copy */.  int p
9600: 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  1;          /* R
9610: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
9620: 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32  from */.  int p2
9630: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
9640: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74  gister to copy t
9650: 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  o */..  n = pOp-
9660: 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d  >p3;.  p1 = pOp-
9670: 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
9680: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
9690: 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32  >0 && p1>0 && p2
96a0: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
96b0: 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e  p1+n<=p2 || p2+n
96c0: 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20  <=p1 );..  pIn1 
96d0: 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70  = &aMem[p1];.  p
96e0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  Out = &aMem[p2];
96f0: 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
9700: 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28  t( pOut<=&aMem[(
9710: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
9720: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
9730: 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b  rt( pIn1<=&aMem[
9740: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
9750: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
9760: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
9770: 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d  pIn1) );.    mem
9780: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
9790: 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69   pOut);.    sqli
97a0: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
97b0: 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64  Out, pIn1);.#ifd
97c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
97d0: 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53      if( pOut->pS
97e0: 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b  copyFrom>=&aMem[
97f0: 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63  p1] && pOut->pSc
9800: 6f 70 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a  opyFrom<pOut ){.
9810: 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f        pOut->pSco
9820: 70 79 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70  pyFrom += pOp->p
9830: 32 20 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65  2 - p1;.    }.#e
9840: 6e 64 69 66 0a 20 20 20 20 44 65 65 70 68 65 6d  ndif.    Deephem
9850: 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20  eralize(pOut);. 
9860: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
9870: 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20  E(p2++, pOut);. 
9880: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70     pIn1++;.    p
9890: 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28  Out++;.  }while(
98a0: 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b   --n );.  break;
98b0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
98c0: 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  opy P1 P2 P3 * *
98d0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
98e0: 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33  P2@P3+1]=r[P1@P3
98f0: 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  +1].**.** Make a
9900: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
9910: 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74  rs P1..P1+P3 int
9920: 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e  o registers P2..
9930: 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  P2+P3..**.** Thi
9940: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
9950: 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20  kes a deep copy 
9960: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41  of the value.  A
9970: 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73   duplicate.** is
9980: 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72   made of any str
9990: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73  ing or blob cons
99a0: 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20  tant.  See also 
99b0: 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73  OP_SCopy..*/.cas
99c0: 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69  e OP_Copy: {.  i
99d0: 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  nt n;..  n = pOp
99e0: 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26  ->p3;.  pIn1 = &
99f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
9a00: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
9a10: 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
9a20: 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a  ( pOut!=pIn1 );.
9a30: 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20    while( 1 ){.  
9a40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9a50: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
9a60: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
9a70: 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65  m);.    Deepheme
9a80: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69  ralize(pOut);.#i
9a90: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
9aa0: 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f  G.    pOut->pSco
9ab0: 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64  pyFrom = 0;.#end
9ac0: 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  if.    REGISTER_
9ad0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f  TRACE(pOp->p2+pO
9ae0: 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a  p->p3-n, pOut);.
9af0: 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30      if( (n--)==0
9b00: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f   ) break;.    pO
9b10: 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ut++;.    pIn1++
9b20: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
9b30: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f  ../* Opcode: SCo
9b40: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
9b50: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
9b60: 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61  ]=r[P1].**.** Ma
9b70: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
9b80: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
9b90: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
9ba0: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
9bb0: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
9bc0: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
9bd0: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
9be0: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
9bf0: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
9c00: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
9c10: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
9c20: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
9c30: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
9c40: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
9c50: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
9c60: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
9c70: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
9c80: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
9c90: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
9ca0: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
9cb0: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
9cc0: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
9cd0: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
9ce0: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
9cf0: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
9d00: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
9d10: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
9d20: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
9d30: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
9d40: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
9d50: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
9d60: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  * out2 */.  pIn1
9d70: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
9d80: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
9d90: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
9da0: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
9db0: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
9dc0: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
9dd0: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
9de0: 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53  Ephem);.#ifdef S
9df0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
9e00: 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ( pOut->pScopyFr
9e10: 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53  om==0 ) pOut->pS
9e20: 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b  copyFrom = pIn1;
9e30: 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
9e40: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
9e50: 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a  esultRow P1 P2 *
9e60: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9e70: 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50 31 40 50  :  output=r[P1@P
9e80: 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67  2].**.** The reg
9e90: 69 73 74 65 72 73 20 50 31 20 74 68 72 6f 75 67  isters P1 throug
9ea0: 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69  h P1+P2-1 contai
9eb0: 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  n a single row o
9ec0: 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68  f.** results. Th
9ed0: 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73  is opcode causes
9ee0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65   the sqlite3_ste
9ef0: 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d  p() call to term
9f00: 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e  inate.** with an
9f10: 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75   SQLITE_ROW retu
9f20: 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73  rn code and it s
9f30: 65 74 73 20 75 70 20 74 68 65 20 73 71 6c 69 74  ets up the sqlit
9f40: 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63  e3_stmt.** struc
9f50: 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20  ture to provide 
9f60: 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 72 28  access to the r(
9f70: 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20  P1)..r(P1+P2-1) 
9f80: 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74 68 65  values as.** the
9f90: 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a   result row..*/.
9fa0: 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f  case OP_ResultRo
9fb0: 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  w: {.  Mem *pMem
9fc0: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73  ;.  int i;.  ass
9fd0: 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75  ert( p->nResColu
9fe0: 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20  mn==pOp->p2 );. 
9ff0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
a000: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
a010: 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c  pOp->p1+pOp->p2<
a020: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
a030: 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e  rsor)+1 );..#ifn
a040: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
a050: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
a060: 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65 20 70  K.  /* Run the p
a070: 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65 72 20  rogress counter 
a080: 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65 74 75  just before retu
a090: 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66  rning..  */.  if
a0a0: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  ( db->xProgress!
a0b0: 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74 65 70  =0.   && nVmStep
a0c0: 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  >=nProgressLimit
a0d0: 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72 6f 67  .   && db->xProg
a0e0: 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65  ress(db->pProgre
a0f0: 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20  ssArg)!=0.  ){. 
a100: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
a110: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 67 6f  NTERRUPT;.    go
a120: 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
a130: 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  lt;.  }.#endif..
a140: 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61    /* If this sta
a150: 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61  tement has viola
a160: 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  ted immediate fo
a170: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
a180: 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e  aints, do.  ** n
a190: 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ot return the nu
a1a0: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64  mber of rows mod
a1b0: 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f  ified. And do no
a1c0: 74 20 52 45 4c 45 41 53 45 20 74 68 65 20 73 74  t RELEASE the st
a1d0: 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61  atement.  ** tra
a1e0: 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65  nsaction. It nee
a1f0: 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ds to be rolled 
a200: 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20  back.  */.  if( 
a210: 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d  SQLITE_OK!=(rc =
a220: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
a230: 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20  kFk(p, 0)) ){.  
a240: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c    assert( db->fl
a250: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
a260: 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65  Rows );.    asse
a270: 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a  rt( p->usesStmtJ
a280: 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72  ournal );.    br
a290: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  eak;.  }..  /* I
a2a0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75  f the SQLITE_Cou
a2b0: 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73  ntRows flag is s
a2c0: 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c  et in sqlite3.fl
a2d0: 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a  ags mask, then .
a2e0: 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65    ** DML stateme
a2f0: 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  nts invoke this 
a300: 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e  opcode to return
a310: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
a320: 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69  ows .  ** modifi
a330: 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
a340: 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
a350: 20 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74   way that a VM t
a360: 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61  hat.  ** opens a
a370: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
a380: 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b  action may invok
a390: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20  e this opcode.. 
a3a0: 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65   **.  ** In case
a3b0: 20 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20   this is such a 
a3c0: 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65  statement, close
a3d0: 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74   any statement t
a3e0: 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20  ransaction.  ** 
a3f0: 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56  opened by this V
a400: 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  M before returni
a410: 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  ng control to th
a420: 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20  e user. This is 
a430: 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74  to.  ** ensure t
a440: 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  hat statement-tr
a450: 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61  ansactions are a
a460: 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f  lways nested, no
a470: 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20  t overlapping.. 
a480: 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20   ** If the open 
a490: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
a4a0: 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f  ction is not clo
a4b0: 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74  sed here, then t
a4c0: 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79  he user.  ** may
a4d0: 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d   step another VM
a4e0: 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20   that opens its 
a4f0: 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72  own statement tr
a500: 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a  ansaction. This.
a510: 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f    ** may lead to
a520: 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61   overlapping sta
a530: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
a540: 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ons..  **.  ** T
a550: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
a560: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65  nsaction is neve
a570: 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72  r a top-level tr
a580: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63  ansaction.  Henc
a590: 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41  e.  ** the RELEA
a5a0: 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61  SE call below ca
a5b0: 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20  n never fail..  
a5c0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  */.  assert( p->
a5d0: 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c  iStatement==0 ||
a5e0: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
a5f0: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
a600: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
a610: 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28  eCloseStatement(
a620: 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  p, SAVEPOINT_REL
a630: 45 41 53 45 29 3b 0a 20 20 69 66 28 20 4e 45 56  EASE);.  if( NEV
a640: 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  ER(rc!=SQLITE_OK
a650: 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ) ){.    break;.
a660: 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69    }..  /* Invali
a670: 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72  date all ephemer
a680: 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61  al cursor row ca
a690: 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63  ches */.  p->cac
a6a0: 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68  heCtr = (p->cach
a6b0: 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20  eCtr + 2)|1;..  
a6c0: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
a6d0: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
a6e0: 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20  current row are 
a6f0: 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a  \000 terminated.
a700: 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e    ** and have an
a710: 20 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20   assigned type. 
a720: 20 54 68 65 20 72 65 73 75 6c 74 73 20 61 72 65   The results are
a730: 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65   de-ephemeralize
a740: 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65  d as.  ** a side
a750: 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20   effect..  */.  
a760: 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c  pMem = p->pResul
a770: 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  tSet = &aMem[pOp
a780: 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p1];.  for(i=0
a790: 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b  ; i<pOp->p2; i++
a7a0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
a7b0: 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b  emIsValid(&pMem[
a7c0: 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68  i]) );.    Deeph
a7d0: 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b  emeralize(&pMem[
a7e0: 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  i]);.    assert(
a7f0: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
a800: 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a  & MEM_Ephem)==0.
a810: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28              || (
a820: 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20  pMem[i].flags & 
a830: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
a840: 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  b))==0 );.    sq
a850: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54  lite3VdbeMemNulT
a860: 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69  erminate(&pMem[i
a870: 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  ]);.    REGISTER
a880: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69  _TRACE(pOp->p1+i
a890: 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d  , &pMem[i]);.  }
a8a0: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
a8b0: 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e  cFailed ) goto n
a8c0: 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74  o_mem;..  /* Ret
a8d0: 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20  urn SQLITE_ROW. 
a8e0: 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69   */.  p->pc = (i
a8f0: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b  nt)(pOp - aOp) +
a900: 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
a910: 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64  E_ROW;.  goto vd
a920: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
a930: 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20   Opcode: Concat 
a940: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
a950: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
a960: 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]+r[P1].**.*
a970: 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69  * Add the text i
a980: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e  n register P1 on
a990: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
a9a0: 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67  e text in.** reg
a9b0: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
a9c0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
a9d0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
a9e0: 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50   If either the P
a9f0: 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65  1 or P2 text are
aa00: 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
aa10: 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a   NULL in P3..**.
aa20: 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20  **   P3 = P2 || 
aa30: 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  P1.**.** It is i
aa40: 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e  llegal for P1 an
aa50: 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73  d P3 to be the s
aa60: 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f  ame register. So
aa70: 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50  metimes,.** if P
aa80: 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65  3 is the same re
aa90: 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68  gister as P2, th
aaa0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
aab0: 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61   is able.** to a
aac0: 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e  void a memcpy().
aad0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63  .*/.case OP_Conc
aae0: 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  at: {           
aaf0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f  /* same as TK_CO
ab00: 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  NCAT, in1, in2, 
ab10: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42  out3 */.  i64 nB
ab20: 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  yte;..  pIn1 = &
ab30: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
ab40: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
ab50: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
ab60: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
ab70: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21  .  assert( pIn1!
ab80: 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28  =pOut );.  if( (
ab90: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
aba0: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
abb0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
abc0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
abd0: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
abe0: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45  eak;.  }.  if( E
abf0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20  xpandBlob(pIn1) 
ac00: 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  || ExpandBlob(pI
ac10: 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  n2) ) goto no_me
ac20: 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  m;.  Stringify(p
ac30: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
ac40: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32    Stringify(pIn2
ac50: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e  , encoding);.  n
ac60: 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b  Byte = pIn1->n +
ac70: 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20   pIn2->n;.  if( 
ac80: 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
ac90: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
aca0: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
acb0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
acc0: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
acd0: 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
ace0: 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74  nt)nByte+2, pOut
acf0: 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67  ==pIn2) ){.    g
ad00: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
ad10: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
ad20: 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b  (pOut, MEM_Str);
ad30: 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e  .  if( pOut!=pIn
ad40: 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  2 ){.    memcpy(
ad50: 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a  pOut->z, pIn2->z
ad60: 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a  , pIn2->n);.  }.
ad70: 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e    memcpy(&pOut->
ad80: 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31  z[pIn2->n], pIn1
ad90: 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20  ->z, pIn1->n);. 
ada0: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d   pOut->z[nByte]=
adb0: 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  0;.  pOut->z[nBy
adc0: 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75  te+1] = 0;.  pOu
add0: 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
ade0: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  Term;.  pOut->n 
adf0: 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
ae00: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
ae10: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
ae20: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
ae30: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
ae40: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31  * Opcode: Add P1
ae50: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
ae60: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
ae70: 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]+r[P2].**.**
ae80: 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69   Add the value i
ae90: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
aea0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
aeb0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
aec0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
aed0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
aee0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
aef0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
af00: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
af10: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
af20: 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50  Multiply P1 P2 P
af30: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
af40: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a  s:  r[P3]=r[P1]*
af50: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d  r[P2].**.**.** M
af60: 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75  ultiply the valu
af70: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
af80: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
af90: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
afa0: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
afb0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
afc0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
afd0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
afe0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
aff0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b000: 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50  e: Subtract P1 P
b010: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b020: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
b030: 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  2]-r[P1].**.** S
b040: 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75  ubtract the valu
b050: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b060: 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20   from the value 
b070: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
b080: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
b090: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b0a0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b0b0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
b0c0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b0d0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b0e0: 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50  ode: Divide P1 P
b0f0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b100: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
b110: 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44  2]/r[P1].**.** D
b120: 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20  ivide the value 
b130: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
b140: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
b150: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
b160: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
b170: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b180: 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66  3 (P3=P2/P1). If
b190: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a   the value in .*
b1a0: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  * register P1 is
b1b0: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
b1c0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20  result is NULL. 
b1d0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
b1e0: 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
b1f0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b200: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
b210: 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50  emainder P1 P2 P
b220: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b230: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25  s:  r[P3]=r[P2]%
b240: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
b250: 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ute the remainde
b260: 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20  r after integer 
b270: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 64  register P2 is d
b280: 69 76 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65  ivided by .** re
b290: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 73 74  gister P1 and st
b2a0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b2b0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a  n register P3. .
b2c0: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
b2d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
b2e0: 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c  s zero the resul
b2f0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66  t is NULL..** If
b300: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
b310: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b320: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b330: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b350: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55  * same as TK_PLU
b360: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
b370: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62  3 */.case OP_Sub
b380: 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20  tract:          
b390: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b3a0: 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e  K_MINUS, in1, in
b3b0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b3c0: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
b3d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b3e0: 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e  e as TK_STAR, in
b3f0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b400: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b420: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41  * same as TK_SLA
b430: 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  SH, in1, in2, ou
b440: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  t3 */.case OP_Re
b450: 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20  mainder: {      
b460: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b470: 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32  TK_REM, in1, in2
b480: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72  , out3 */.  char
b490: 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53   bIntint;   /* S
b4a0: 74 61 72 74 65 64 20 6f 75 74 20 61 73 20 74 77  tarted out as tw
b4b0: 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e  o integer operan
b4c0: 64 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  ds */.  u16 flag
b4d0: 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69  s;      /* Combi
b4e0: 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20  ned MEM_* flags 
b4f0: 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73  from both inputs
b500: 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b   */.  u16 type1;
b510: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63        /* Numeric
b520: 20 74 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70   type of left op
b530: 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74  erand */.  u16 t
b540: 79 70 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype2;      /* Nu
b550: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 72 69  meric type of ri
b560: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
b570: 20 69 36 34 20 69 41 3b 20 20 20 20 20 20 20 20   i64 iA;        
b580: 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
b590: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
b5a0: 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20  d */.  i64 iB;  
b5b0: 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
b5c0: 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  r value of right
b5d0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
b5e0: 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a  uble rA;      /*
b5f0: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c   Real value of l
b600: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
b610: 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20   double rB;     
b620: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
b630: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
b640: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
b650: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74  em[pOp->p1];.  t
b660: 79 70 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79  ype1 = numericTy
b670: 70 65 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  pe(pIn1);.  pIn2
b680: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
b690: 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d  ];.  type2 = num
b6a0: 65 72 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a  ericType(pIn2);.
b6b0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
b6c0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
b6d0: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c   = pIn1->flags |
b6e0: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn2->flags;.  
b6f0: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
b700: 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f  _Null)!=0 ) goto
b710: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
b720: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66  lt_is_null;.  if
b730: 28 20 28 74 79 70 65 31 20 26 20 74 79 70 65 32  ( (type1 & type2
b740: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
b750: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
b760: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
b770: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49  In2->u.i;.    bI
b780: 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73  ntint = 1;.    s
b790: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
b7a0: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
b7b0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69   OP_Add:       i
b7c0: 66 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  f( sqlite3AddInt
b7d0: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
b7e0: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
b7f0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
b800: 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20  _Subtract:  if( 
b810: 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
b820: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
b830: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
b840: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
b850: 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c  ltiply:  if( sql
b860: 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42  ite3MulInt64(&iB
b870: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
b880: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
b890: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
b8a0: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
b8b0: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
b8c0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
b8d0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
b8e0: 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69   if( iA==-1 && i
b8f0: 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  B==SMALLEST_INT6
b900: 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  4 ) goto fp_math
b910: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20  ;.        iB /= 
b920: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
b930: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
b940: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
b950: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
b960: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
b970: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
b980: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b990: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
b9a0: 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20       iB %= iA;. 
b9b0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
b9c0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
b9d0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a  pOut->u.i = iB;.
b9e0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
b9f0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
ba00: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
ba10: 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f  bIntint = 0;.fp_
ba20: 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73  math:.    rA = s
ba30: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
ba40: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72  lue(pIn1);.    r
ba50: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  B = sqlite3VdbeR
ba60: 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  ealValue(pIn2);.
ba70: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
ba80: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
ba90: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
baa0: 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20        rB += rA; 
bab0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
bac0: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
bad0: 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41  act:    rB -= rA
bae0: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
baf0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
bb00: 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20  tiply:    rB *= 
bb10: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
bb20: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
bb30: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
bb40: 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e   /* (double)0 In
bb50: 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f   case of SQLITE_
bb60: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
bb70: 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  INT... */.      
bb80: 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c    if( rA==(doubl
bb90: 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  e)0 ) goto arith
bba0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
bbb0: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42  null;.        rB
bbc0: 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20   /= rA;.        
bbd0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
bbe0: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
bbf0: 20 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36          iA = (i6
bc00: 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42  4)rA;.        iB
bc10: 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20   = (i64)rB;.    
bc20: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
bc30: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
bc40: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
bc50: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
bc60: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
bc70: 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c       rB = (doubl
bc80: 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20  e)(iB % iA);.   
bc90: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
bca0: 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66    }.    }.#ifdef
bcb0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
bcc0: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
bcd0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a  pOut->u.i = rB;.
bce0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
bcf0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
bd00: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28  );.#else.    if(
bd10: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42   sqlite3IsNaN(rB
bd20: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
bd30: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
bd40: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d  t_is_null;.    }
bd50: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  .    pOut->u.r =
bd60: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
bd70: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
bd80: 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28  M_Real);.    if(
bd90: 20 28 28 74 79 70 65 31 7c 74 79 70 65 32 29 26   ((type1|type2)&
bda0: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20  MEM_Real)==0 && 
bdb0: 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20  !bIntint ){.    
bdc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
bdd0: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75  egerAffinity(pOu
bde0: 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  t);.    }.#endif
bdf0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
be00: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
be10: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
be20: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
be30: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
be40: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
be50: 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50  CollSeq P1 * * P
be60: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
be70: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
be80: 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66 20  lSeq struct. If 
be90: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
bea0: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
beb0: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
bec0: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
bed0: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
bee0: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
bef0: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
bf00: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
bf10: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
bf20: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
bf30: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
bf40: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
bf50: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
bf60: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
bf70: 69 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72  it is a register
bf80: 20 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65   that a subseque
bf90: 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d  nt min() or.** m
bfa0: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77  ax() aggregate w
bfb0: 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20  ill set to 1 if 
bfc0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
bfd0: 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d  is not the minim
bfe0: 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d  um or.** maximum
bff0: 2e 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74  .  The P1 regist
c000: 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  er is initialize
c010: 64 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69  d to 0 by this i
c020: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
c030: 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
c040: 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  used by the impl
c050: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
c060: 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64  e aforementioned
c070: 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f   functions.** to
c080: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   retrieve the co
c090: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
c0a0: 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63   set by this opc
c0b0: 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  ode is not avail
c0c0: 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79  able.** publicly
c0d0: 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e  .  Only built-in
c0e0: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20   functions have 
c0f0: 61 63 63 65 73 73 20 74 6f 20 74 68 69 73 20 66  access to this f
c100: 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
c110: 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20  OP_CollSeq: {.  
c120: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
c130: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
c140: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  );.  if( pOp->p1
c150: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c160: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
c170: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30  aMem[pOp->p1], 0
c180: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c190: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75  }../* Opcode: Fu
c1a0: 6e 63 74 69 6f 6e 30 20 50 31 20 50 32 20 50 33  nction0 P1 P2 P3
c1b0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
c1c0: 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72  is: r[P3]=func(r
c1d0: 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49  [P2@P5]).**.** I
c1e0: 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e  nvoke a user fun
c1f0: 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70  ction (P4 is a p
c200: 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63  ointer to a Func
c210: 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74  tion structure t
c220: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74  hat.** defines t
c230: 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74  he function) wit
c240: 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74  h P5 arguments t
c250: 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
c260: 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63  er P2 and.** suc
c270: 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65  cessors.  The re
c280: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
c290: 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69  tion is stored i
c2a0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
c2b0: 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75  * Register P3 mu
c2c0: 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66  st not be one of
c2d0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
c2e0: 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  puts..**.** P1 i
c2f0: 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61  s a 32-bit bitma
c300: 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68  sk indicating wh
c310: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63  ether or not eac
c320: 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  h argument to th
c330: 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  e .** function w
c340: 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f  as determined to
c350: 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20   be constant at 
c360: 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66  compile time. If
c370: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
c380: 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74  gument was const
c390: 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f  ant then bit 0 o
c3a0: 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69  f P1 is set. Thi
c3b0: 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  s is used to det
c3c0: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
c3d0: 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f  r meta data asso
c3e0: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73  ciated with a us
c3f0: 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75  er function argu
c400: 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a  ment using the.*
c410: 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75  * sqlite3_set_au
c420: 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20  xdata() API may 
c430: 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e  be safely retain
c440: 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  ed until the nex
c450: 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20  t.** invocation 
c460: 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  of this opcode..
c470: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
c480: 46 75 6e 63 74 69 6f 6e 2c 20 41 67 67 53 74 65  Function, AggSte
c490: 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 2f  p, AggFinal.*/./
c4a0: 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69  * Opcode: Functi
c4b0: 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
c4c0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
c4d0: 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50  [P3]=func(r[P2@P
c4e0: 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  5]).**.** Invoke
c4f0: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
c500: 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65   (P4 is a pointe
c510: 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
c520: 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 74  context object t
c530: 68 61 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  hat.** contains 
c540: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
c550: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
c560: 72 75 6e 29 20 77 69 74 68 20 50 35 20 61 72 67  run) with P5 arg
c570: 75 6d 65 6e 74 73 20 74 61 6b 65 6e 0a 2a 2a 20  uments taken.** 
c580: 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
c590: 20 61 6e 64 20 73 75 63 63 65 73 73 6f 72 73 2e   and successors.
c5a0: 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20    The result of 
c5b0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  the function is 
c5c0: 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20 72 65 67  stored.** in reg
c5d0: 69 73 74 65 72 20 50 33 2e 20 20 52 65 67 69 73  ister P3.  Regis
c5e0: 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20  ter P3 must not 
c5f0: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75  be one of the fu
c600: 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a  nction inputs..*
c610: 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d  *.** P1 is a 32-
c620: 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69  bit bitmask indi
c630: 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
c640: 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d  r not each argum
c650: 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66  ent to the .** f
c660: 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65  unction was dete
c670: 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e  rmined to be con
c680: 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65  stant at compile
c690: 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69   time. If the fi
c6a0: 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
c6b0: 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65  was constant the
c6c0: 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73  n bit 0 of P1 is
c6d0: 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73   set. This is us
c6e0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a  ed to determine.
c6f0: 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20  ** whether meta 
c700: 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20  data associated 
c710: 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63  with a user func
c720: 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73  tion argument us
c730: 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74  ing the.** sqlit
c740: 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29  e3_set_auxdata()
c750: 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65   API may be safe
c760: 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69  ly retained unti
c770: 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  l the next.** in
c780: 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  vocation of this
c790: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
c7a0: 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  QL functions are
c7b0: 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65 64   initially coded
c7c0: 20 61 73 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30   as OP_Function0
c7d0: 20 77 69 74 68 20 50 34 20 70 6f 69 6e 74 69 6e   with P4 pointin
c7e0: 67 0a 2a 2a 20 74 6f 20 74 68 65 20 66 75 6e 63  g.** to the func
c7f0: 74 69 6f 6e 20 69 74 73 65 6c 66 2e 20 20 42 75  tion itself.  Bu
c800: 74 20 6f 6e 20 66 69 72 73 74 20 65 76 61 6c 75  t on first evalu
c810: 61 74 69 6f 6e 2c 20 74 68 65 20 50 34 20 6f 70  ation, the P4 op
c820: 65 72 61 6e 64 20 69 73 0a 2a 2a 20 61 75 74 6f  erand is.** auto
c830: 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6e 76 65 72  matically conver
c840: 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69  ted into an sqli
c850: 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65  te3_context obje
c860: 63 74 20 61 6e 64 20 74 68 65 20 6f 70 65 72 61  ct and the opera
c870: 74 69 6f 6e 0a 2a 2a 20 63 68 61 6e 67 65 64 20  tion.** changed 
c880: 74 6f 20 74 68 69 73 20 4f 50 5f 46 75 6e 63 74  to this OP_Funct
c890: 69 6f 6e 20 6f 70 63 6f 64 65 2e 20 20 49 6e 20  ion opcode.  In 
c8a0: 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e  this way, the in
c8b0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 0a  itialization of.
c8c0: 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ** the sqlite3_c
c8d0: 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 6f 63  ontext object oc
c8e0: 63 75 72 73 20 6f 6e 6c 79 20 6f 6e 63 65 2c 20  curs only once, 
c8f0: 72 61 74 68 65 72 20 74 68 61 6e 20 6f 6e 63 65  rather than once
c900: 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 65 76 61   for each.** eva
c910: 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 66  luation of the f
c920: 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  unction..**.** S
c930: 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f  ee also: Functio
c940: 6e 30 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67  n0, AggStep, Agg
c950: 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50  Final.*/.case OP
c960: 5f 46 75 6e 63 74 69 6f 6e 30 3a 20 7b 0a 20 20  _Function0: {.  
c970: 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33  int n;.  sqlite3
c980: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a  _context *pCtx;.
c990: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
c9a0: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44  p4type==P4_FUNCD
c9b0: 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d  EF );.  n = pOp-
c9c0: 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p5;.  assert( p
c9d0: 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
c9e0: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
c9f0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61  >nCursor) );.  a
ca00: 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28  ssert( n==0 || (
ca10: 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
ca20: 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  ->p2+n<=(p->nMem
ca30: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20  -p->nCursor)+1) 
ca40: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
ca50: 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20  ->p3<pOp->p2 || 
ca60: 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32  pOp->p3>=pOp->p2
ca70: 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73  +n );.  pCtx = s
ca80: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
ca90: 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43  w(db, sizeof(*pC
caa0: 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65  tx) + (n-1)*size
cab0: 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  of(sqlite3_value
cac0: 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d  *));.  if( pCtx=
cad0: 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
cae0: 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d  ;.  pCtx->pOut =
caf0: 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e   0;.  pCtx->pFun
cb00: 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
cb10: 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d  c;.  pCtx->iOp =
cb20: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
cb30: 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65  );.  pCtx->pVdbe
cb40: 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72   = p;.  pCtx->ar
cb50: 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70  gc = n;.  pOp->p
cb60: 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43  4type = P4_FUNCC
cb70: 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43  TX;.  pOp->p4.pC
cb80: 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70  tx = pCtx;.  pOp
cb90: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46 75  ->opcode = OP_Fu
cba0: 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c  nction;.  /* Fal
cbb0: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
cbc0: 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a  P_Function */.}.
cbd0: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
cbe0: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  : {.  int i;.  s
cbf0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
cc00: 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
cc10: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
cc20: 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43  _FUNCCTX );.  pC
cc30: 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74  tx = pOp->p4.pCt
cc40: 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  x;..  /* If this
cc50: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73   function is ins
cc60: 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72  ide of a trigger
cc70: 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61  , the register a
cc80: 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20  rray in aMem[]. 
cc90: 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65   ** might change
cca0: 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61   from one evalua
ccb0: 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74  tion to the next
ccc0: 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63  .  The next bloc
ccd0: 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63  k of code.  ** c
cce0: 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20  hecks to see if 
ccf0: 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
cd00: 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20  ay has changed, 
cd10: 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a  and if so it.  *
cd20: 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20  * reinitializes 
cd30: 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72  the relavant par
cd40: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
cd50: 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74  3_context object
cd60: 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e   */.  if( pCtx->
cd70: 70 4f 75 74 20 21 3d 20 26 61 4d 65 6d 5b 70 4f  pOut != &aMem[pO
cd80: 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20 20 70 43  p->p3] ){.    pC
cd90: 74 78 2d 3e 70 4f 75 74 20 3d 20 26 61 4d 65 6d  tx->pOut = &aMem
cda0: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66  [pOp->p3];.    f
cdb0: 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d  or(i=pCtx->argc-
cdc0: 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43  1; i>=0; i--) pC
cdd0: 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61  tx->argv[i] = &a
cde0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a  Mem[pOp->p2+i];.
cdf0: 20 20 7d 0a 0a 20 20 6d 65 6d 41 62 6f 75 74 54    }..  memAboutT
ce00: 6f 43 68 61 6e 67 65 28 70 2c 20 70 43 74 78 2d  oChange(p, pCtx-
ce10: 3e 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53  >pOut);.#ifdef S
ce20: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
ce30: 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61  r(i=0; i<pCtx->a
ce40: 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  rgc; i++){.    a
ce50: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
ce60: 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  d(pCtx->argv[i])
ce70: 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
ce80: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69  _TRACE(pOp->p2+i
ce90: 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  , pCtx->argv[i])
cea0: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 4d  ;.  }.#endif.  M
ceb0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 43  emSetTypeFlag(pC
cec0: 74 78 2d 3e 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  tx->pOut, MEM_Nu
ced0: 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72  ll);.  pCtx->fEr
cee0: 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20  rorOrAux = 0;.  
cef0: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
cf00: 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a 70  lastRowid;.  (*p
cf10: 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 46 75 6e  Ctx->pFunc->xFun
cf20: 63 29 28 70 43 74 78 2c 20 70 43 74 78 2d 3e 61  c)(pCtx, pCtx->a
cf30: 72 67 63 2c 20 70 43 74 78 2d 3e 61 72 67 76 29  rgc, pCtx->argv)
cf40: 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
cf50: 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73  5-23230 */.  las
cf60: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
cf70: 74 52 6f 77 69 64 3b 20 20 2f 2a 20 52 65 6d 65  tRowid;  /* Reme
cf80: 6d 62 65 72 20 72 6f 77 69 64 20 63 68 61 6e 67  mber rowid chang
cf90: 65 73 20 6d 61 64 65 20 62 79 20 78 46 75 6e 63  es made by xFunc
cfa0: 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   */..  /* If the
cfb0: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
cfc0: 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72  ed an error, thr
cfd0: 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  ow an exception 
cfe0: 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66  */.  if( pCtx->f
cff0: 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20  ErrorOrAux ){.  
d000: 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72    if( pCtx->isEr
d010: 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ror ){.      sql
d020: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
d030: 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
d040: 61 6c 75 65 5f 74 65 78 74 28 70 43 74 78 2d 3e  alue_text(pCtx->
d050: 70 4f 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63  pOut));.      rc
d060: 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72   = pCtx->isError
d070: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
d080: 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78  te3VdbeDeleteAux
d090: 44 61 74 61 28 70 2c 20 28 69 6e 74 29 28 70 4f  Data(p, (int)(pO
d0a0: 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 2d 3e 70  p - aOp), pOp->p
d0b0: 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f  1);.  }..  /* Co
d0c0: 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  py the result of
d0d0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
d0e0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 2a  to register P3 *
d0f0: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  /.  sqlite3VdbeC
d100: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 43  hangeEncoding(pC
d110: 74 78 2d 3e 70 4f 75 74 2c 20 65 6e 63 6f 64 69  tx->pOut, encodi
d120: 6e 67 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  ng);.  if( sqlit
d130: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
d140: 70 43 74 78 2d 3e 70 4f 75 74 29 20 29 7b 0a 20  pCtx->pOut) ){. 
d150: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
d160: 0a 20 20 7d 0a 0a 20 20 52 45 47 49 53 54 45 52  .  }..  REGISTER
d170: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
d180: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 55  pCtx->pOut);.  U
d190: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
d1a0: 5a 45 28 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a  ZE(pCtx->pOut);.
d1b0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
d1c0: 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31  pcode: BitAnd P1
d1d0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
d1e0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
d1f0: 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]&r[P2].**.**
d200: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
d210: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
d220: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
d230: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
d240: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
d250: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
d260: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
d270: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
d280: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
d290: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
d2a0: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
d2b0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
d2c0: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b    r[P3]=r[P1]|r[
d2d0: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
d2e0: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
d2f0: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
d300: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
d310: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
d320: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
d330: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
d340: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
d350: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
d360: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
d370: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
d380: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
d390: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
d3a0: 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d  P3]=r[P2]<<r[P1]
d3b0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
d3c0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
d3d0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
d3e0: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
d3f0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
d400: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
d410: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
d420: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
d430: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
d440: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
d450: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
d460: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
d470: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
d480: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
d490: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
d4a0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
d4b0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e  s:  r[P3]=r[P2]>
d4c0: 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69  >r[P1].**.** Shi
d4d0: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
d4e0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
d4f0: 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74   P2 to the right
d500: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
d510: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
d520: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
d530: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
d540: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
d550: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
d560: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
d570: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
d580: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
d590: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
d5a0: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20  P_BitAnd:       
d5b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d5c0: 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20  e as TK_BITAND, 
d5d0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
d5e0: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a  /.case OP_BitOr:
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d600: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d610: 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  BITOR, in1, in2,
d620: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
d630: 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20  _ShiftLeft:     
d640: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d650: 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69   as TK_LSHIFT, i
d660: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
d670: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69  .case OP_ShiftRi
d680: 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ght: {          
d690: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
d6a0: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
d6b0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69   out3 */.  i64 i
d6c0: 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69  A;.  u64 uA;.  i
d6d0: 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a  64 iB;.  u8 op;.
d6e0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d6f0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
d700: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
d710: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
d720: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
d730: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
d740: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
d750: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
d760: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
d770: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
d780: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41   break;.  }.  iA
d790: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
d7a0: 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  tValue(pIn2);.  
d7b0: 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iB = sqlite3Vdbe
d7c0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
d7d0: 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    op = pOp->opco
d7e0: 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50  de;.  if( op==OP
d7f0: 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69  _BitAnd ){.    i
d800: 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65  A &= iB;.  }else
d810: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f   if( op==OP_BitO
d820: 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69  r ){.    iA |= i
d830: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  B;.  }else if( i
d840: 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  B!=0 ){.    asse
d850: 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  rt( op==OP_Shift
d860: 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  Right || op==OP_
d870: 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20  ShiftLeft );..  
d880: 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67    /* If shifting
d890: 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61   by a negative a
d8a0: 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20  mount, shift in 
d8b0: 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74  the other direct
d8c0: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69  ion */.    if( i
d8d0: 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  B<0 ){.      ass
d8e0: 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67  ert( OP_ShiftRig
d8f0: 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  ht==OP_ShiftLeft
d900: 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d  +1 );.      op =
d910: 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20   2*OP_ShiftLeft 
d920: 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20  + 1 - op;.      
d930: 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20  iB = iB>(-64) ? 
d940: 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a  -iB : 64;.    }.
d950: 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20  .    if( iB>=64 
d960: 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69  ){.      iA = (i
d970: 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  A>=0 || op==OP_S
d980: 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20  hiftLeft) ? 0 : 
d990: 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  -1;.    }else{. 
d9a0: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c       memcpy(&uA,
d9b0: 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29   &iA, sizeof(uA)
d9c0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d  );.      if( op=
d9d0: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b  =OP_ShiftLeft ){
d9e0: 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20  .        uA <<= 
d9f0: 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  iB;.      }else{
da00: 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20  .        uA >>= 
da10: 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  iB;.        /* S
da20: 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20  ign-extend on a 
da30: 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61  right shift of a
da40: 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72   negative number
da50: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
da60: 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28  iA<0 ) uA |= (((
da70: 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (u64)0xffffffff)
da80: 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66  <<32)|0xffffffff
da90: 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20  ) << (64-iB);.  
daa0: 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63      }.      memc
dab0: 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a  py(&iA, &uA, siz
dac0: 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a  eof(iA));.    }.
dad0: 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
dae0: 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79  = iA;.  MemSetTy
daf0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
db00: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
db10: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
db20: 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20  dImm  P1 P2 * * 
db30: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
db40: 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a  r[P1]=r[P1]+P2.*
db50: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
db60: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
db70: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
db80: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
db90: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
dba0: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
dbb0: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
dbc0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
dbd0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
dbe0: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
dbf0: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
dc00: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
dc10: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
dc20: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
dc30: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
dc40: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
dc50: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
dc60: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
dc70: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
dc80: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
dc90: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
dca0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
dcb0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
dcc0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
dcd0: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
dce0: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
dcf0: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
dd00: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
dd10: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
dd20: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
dd30: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
dd40: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
dd50: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
dd60: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
dd70: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
dd80: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
dd90: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
dda0: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
ddb0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
ddc0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
ddd0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
dde0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
ddf0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
de00: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  Int)==0 ){.    a
de10: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
de20: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
de30: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
de40: 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
de50: 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61  Taken((pIn1->fla
de60: 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20  gs&MEM_Int)==0, 
de70: 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  2);.    if( (pIn
de80: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
de90: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
dea0: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
deb0: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
dec0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
ded0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
dee0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
def0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
df00: 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
df10: 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20  to_p2;.      }. 
df20: 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65     }.  }.  MemSe
df30: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
df40: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
df50: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
df60: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
df70: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
df80: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
df90: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
dfa0: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
dfb0: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
dfc0: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
dfd0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
dfe0: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
dff0: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
e000: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
e010: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
e020: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
e030: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
e040: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
e050: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
e060: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
e070: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
e080: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
e090: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
e0a0: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
e0b0: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
e0c0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
e0d0: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
e0e0: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
e0f0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
e100: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
e110: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
e120: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
e130: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
e140: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
e150: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
e160: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
e170: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e180: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
e190: 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32 20  ode: Cast P1 P2 
e1a0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
e1b0: 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
e1c0: 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74  ]).**.** Force t
e1d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
e1e0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 68  ster P1 to be th
e1f0: 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  e type defined b
e200: 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c  y P2..** .** <ul
e210: 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  >.** <li value="
e220: 39 37 22 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69  97"> TEXT.** <li
e230: 20 76 61 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f   value="98"> BLO
e240: 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  B.** <li value="
e250: 39 39 22 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20  99"> NUMERIC.** 
e260: 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 30 22 3e  <li value="100">
e270: 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20   INTEGER.** <li 
e280: 76 61 6c 75 65 3d 22 31 30 31 22 3e 20 52 45 41  value="101"> REA
e290: 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  L.** </ul>.**.**
e2a0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
e2b0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
e2c0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
e2d0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
e2e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73 74 3a  */.case OP_Cast:
e2f0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e300: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
e310: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
e320: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42  =SQLITE_AFF_BLOB
e330: 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c   && pOp->p2<=SQL
e340: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
e350: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
e360: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
e370: 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74 63 61  TEXT );.  testca
e380: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
e390: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a  ITE_AFF_BLOB );.
e3a0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
e3b0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
e3c0: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74 65 73  NUMERIC );.  tes
e3d0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
e3e0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
e3f0: 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  ER );.  testcase
e400: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
e410: 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20  E_AFF_REAL );.  
e420: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e430: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
e440: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
e450: 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  1);.  rc = Expan
e460: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73  dBlob(pIn1);.  s
e470: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 61 73  qlite3VdbeMemCas
e480: 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c  t(pIn1, pOp->p2,
e490: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
e4a0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
e4b0: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
e4c0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
e4d0: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
e4e0: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  /../* Opcode: Lt
e4f0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
e500: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
e510: 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f  r[P1]<r[P3] goto
e520: 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72   P2.**.** Compar
e530: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
e540: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
e550: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
e560: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
e570: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
e580: 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  P2.  .**.** If t
e590: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
e5a0: 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69  NULL bit of P5 i
e5b0: 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72  s set and either
e5c0: 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72   reg(P1) or.** r
e5d0: 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74  eg(P3) is NULL t
e5e0: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
e5f0: 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54  p.  If the SQLIT
e600: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a  E_JUMPIFNULL .**
e610: 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68   bit is clear th
e620: 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
e630: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
e640: 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  d is NULL..**.**
e650: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
e660: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
e670: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
e680: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
e690: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
e6a0: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
e6b0: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
e6c0: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
e6d0: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
e6e0: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
e6f0: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
e700: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
e710: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
e720: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
e730: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
e740: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
e750: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
e760: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
e770: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
e780: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
e790: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
e7a0: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
e7b0: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
e7c0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
e7d0: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
e7e0: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
e7f0: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
e800: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
e810: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
e820: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
e830: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
e840: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
e850: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
e860: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
e870: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
e880: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
e890: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
e8a0: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
e8b0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
e8c0: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
e8d0: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
e8e0: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
e8f0: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
e900: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
e910: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
e920: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
e930: 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f  4 is  used to do
e940: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
e950: 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73    If P4 is not s
e960: 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a  pecified then.**
e970: 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65   memcmp() is use
e980: 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  d to compare tex
e990: 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f  t string.  If bo
e9a0: 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a  th values are.**
e9b0: 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61   numeric, then a
e9c0: 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69   numeric compari
e9d0: 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20  son is used. If 
e9e0: 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a  the two values.*
e9f0: 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65  * are of differe
ea00: 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e  nt types, then n
ea10: 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69  umbers are consi
ea20: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a  dered less than.
ea30: 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73  ** strings and s
ea40: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69  trings are consi
ea50: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20  dered less than 
ea60: 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  blobs..**.** If 
ea70: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
ea80: 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  P2 bit of P5 is 
ea90: 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74  set, then do not
eaa0: 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c   jump.  Instead,
eab0: 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c  .** store a bool
eac0: 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68  ean result (eith
ead0: 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e  er 0, or 1, or N
eae0: 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72  ULL) in register
eaf0: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
eb00: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
eb10: 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50 35  bit is set in P5
eb20: 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75  , then NULL valu
eb30: 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
eb40: 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e  d.** equal to on
eb50: 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69  e another, provi
eb60: 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64 6f  ded that they do
eb70: 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72 20   not have their 
eb80: 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62  MEM_Cleared.** b
eb90: 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  it set..*/./* Op
eba0: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
ebb0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
ebc0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72  sis: if r[P1]!=r
ebd0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
ebe0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
ebf0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
ec00: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
ec10: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
ec20: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
ec30: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
ec40: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
ec50: 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65  e not equal.  Se
ec60: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
ec70: 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  for.** additiona
ec80: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
ec90: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e  *.** If SQLITE_N
eca0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20  ULLEQ is set in 
ecb0: 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  P5 then the resu
ecc0: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
ecd0: 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65   is always eithe
ece0: 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c  r.** true or fal
ecf0: 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20  se and is never 
ed00: 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f  NULL.  If both o
ed10: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
ed20: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
ed30: 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  .** of compariso
ed40: 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20  n is false.  If 
ed50: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
ed60: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
ed70: 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a  result is true..
ed80: 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70  ** If neither op
ed90: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
eda0: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
edb0: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
edc0: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
edd0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
ede0: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
edf0: 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  om P5..*/./* Opc
ee00: 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33  ode: Eq P1 P2 P3
ee10: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
ee20: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b  is: if r[P1]==r[
ee30: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
ee40: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
ee50: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
ee60: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
ee70: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
ee80: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
ee90: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
eea0: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
eeb0: 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74   equal..** See t
eec0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
eed0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
eee0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
eef0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
ef00: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
ef10: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
ef20: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
ef30: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
ef40: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
ef50: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
ef60: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
ef70: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
ef80: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
ef90: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
efa0: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
efb0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
efc0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
efd0: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
efe0: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
eff0: 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75  is NULL the resu
f000: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
f010: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
f020: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
f030: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
f040: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
f050: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
f060: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
f070: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
f080: 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f   r[P1]<=r[P3] go
f090: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
f0a0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
f0b0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
f0c0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
f0d0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
f0e0: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
f0f0: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
f100: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
f110: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
f120: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
f130: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
f140: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
f150: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
f160: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
f170: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
f180: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
f190: 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d  : if r[P1]>r[P3]
f1a0: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
f1b0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
f1c0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
f1d0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
f1e0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
f1f0: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
f200: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
f210: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
f220: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
f230: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
f240: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
f250: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
f260: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
f270: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
f280: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
f290: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
f2a0: 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]>=r[P3] goto
f2b0: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
f2c0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
f2d0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
f2e0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
f2f0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
f300: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
f310: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
f320: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
f330: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
f340: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
f350: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
f360: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f370: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f380: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
f390: 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Eq:            
f3a0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
f3b0: 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _EQ, jump, in1, 
f3c0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
f3d0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
f3e0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
f3f0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
f400: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a  3 */.case OP_Lt:
f410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f420: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c  * same as TK_LT,
f430: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
f440: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20  */.case OP_Le:  
f450: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f460: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a  same as TK_LE, j
f470: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
f480: 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20  .case OP_Gt:    
f490: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f4a0: 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d  me as TK_GT, jum
f4b0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
f4c0: 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20  ase OP_Ge: {    
f4d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
f4e0: 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c   as TK_GE, jump,
f4f0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
f500: 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
f510: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
f520: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
f530: 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70  f pIn1 against p
f540: 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  In3 */.  char af
f550: 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20  finity;      /* 
f560: 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20  Affinity to use 
f570: 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a  for comparison *
f580: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20  /.  u16 flags1; 
f590: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
f5a0: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
f5b0: 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20   of pIn1->flags 
f5c0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b  */.  u16 flags3;
f5d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
f5e0: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
f5f0: 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73  e of pIn3->flags
f600: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
f610: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
f620: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
f630: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20  ->p3];.  flags1 
f640: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn1->flags;. 
f650: 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
f660: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
f670: 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d  ags1 | flags3)&M
f680: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
f690: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
f6a0: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
f6b0: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
f6c0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
f6d0: 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
f6e0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
f6f0: 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
f700: 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
f710: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
f720: 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
f730: 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
f740: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
f750: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
f760: 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
f770: 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
f780: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
f790: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
f7a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
f7b0: 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
f7c0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
f7d0: 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  e );.      asser
f7e0: 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  t( (flags1 & MEM
f7f0: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a  _Cleared)==0 );.
f800: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
f810: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f820: 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29  JUMPIFNULL)==0 )
f830: 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  ;.      if( (fla
f840: 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs1&MEM_Null)!=0
f850: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
f860: 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s3&MEM_Null)!=0.
f870: 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
f880: 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d  3&MEM_Cleared)==
f890: 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
f8a0: 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20     res = 0;  /* 
f8b0: 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75 61  Results are equa
f8c0: 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  l */.      }else
f8d0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
f8e0: 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61  1;  /* Results a
f8f0: 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a  re not equal */.
f900: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
f910: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  e{.      /* SQLI
f920: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65  TE_NULLEQ is cle
f930: 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20  ar and at least 
f940: 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  one operand is N
f950: 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ULL,.      ** th
f960: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
f970: 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20   always NULL..  
f980: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
f990: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
f9a0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f9b0: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
f9c0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
f9d0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
f9e0: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
f9f0: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
fa00: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
fa10: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
fa20: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
fa30: 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  l);.        REGI
fa40: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
fa50: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
fa60: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
fa70: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
fa80: 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66  2,3);.        if
fa90: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
faa0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
fab0: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
fac0: 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
fad0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
fae0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
faf0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
fb00: 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   Neither operand
fb10: 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20   is NULL.  Do a 
fb20: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20  comparison. */. 
fb30: 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f     affinity = pO
fb40: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41  p->p5 & SQLITE_A
fb50: 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28  FF_MASK;.    if(
fb60: 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54   affinity>=SQLIT
fb70: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b  E_AFF_NUMERIC ){
fb80: 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31  .      if( (pIn1
fb90: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
fba0: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
fbb0: 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  Str))==MEM_Str )
fbc0: 7b 0a 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e  {.        applyN
fbd0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
fbe0: 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a  In1,0);.      }.
fbf0: 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
fc00: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
fc10: 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
fc20: 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
fc30: 0a 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75  .        applyNu
fc40: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
fc50: 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  n3,0);.      }. 
fc60: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66     }else if( aff
fc70: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
fc80: 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20  F_TEXT ){.      
fc90: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
fca0: 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26   & MEM_Str)==0 &
fcb0: 26 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  & (pIn1->flags &
fcc0: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
fcd0: 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  al))!=0 ){.     
fce0: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
fcf0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
fd00: 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65  nt );.        te
fd10: 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c  stcase( pIn1->fl
fd20: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
fd30: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
fd40: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
fd50: 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn1, encoding
fd60: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65  , 1);.        te
fd70: 73 74 63 61 73 65 28 20 28 66 6c 61 67 73 31 26  stcase( (flags1&
fd80: 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e  MEM_Dyn) != (pIn
fd90: 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e  1->flags&MEM_Dyn
fda0: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61  ) );.        fla
fdb0: 67 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  gs1 = (pIn1->fla
fdc0: 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61  gs & ~MEM_TypeMa
fdd0: 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 20 26 20  sk) | (flags1 & 
fde0: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
fdf0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
fe00: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
fe10: 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28  MEM_Str)==0 && (
fe20: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pIn3->flags & (M
fe30: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
fe40: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
fe50: 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e  testcase( pIn3->
fe60: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
fe70: 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
fe80: 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ase( pIn3->flags
fe90: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
fea0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
feb0: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
fec0: 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31  In3, encoding, 1
fed0: 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
fee0: 61 73 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d  ase( (flags3&MEM
fef0: 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e  _Dyn) != (pIn3->
ff00: 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29  flags&MEM_Dyn) )
ff10: 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 33  ;.        flags3
ff20: 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20   = (pIn3->flags 
ff30: 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  & ~MEM_TypeMask)
ff40: 20 7c 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d   | (flags3 & MEM
ff50: 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20  _TypeMask);.    
ff60: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
ff70: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
ff80: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c  e==P4_COLLSEQ ||
ff90: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d   pOp->p4.pColl==
ffa0: 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e  0 );.    if( pIn
ffb0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  1->flags & MEM_Z
ffc0: 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ero ){.      sql
ffd0: 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
ffe0: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20  dBlob(pIn1);.   
fff0: 20 20 20 66 6c 61 67 73 31 20 26 3d 20 7e 4d 45     flags1 &= ~ME
10000 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20  M_Zero;.    }.  
10010 20 20 69 66 28 20 70 49 6e 33 2d 3e 66 6c 61 67    if( pIn3->flag
10020 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
10030 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10040 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70  eMemExpandBlob(p
10050 49 6e 33 29 3b 0a 20 20 20 20 20 20 66 6c 61 67  In3);.      flag
10060 73 33 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b  s3 &= ~MEM_Zero;
10070 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64  .    }.    if( d
10080 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
10090 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
100a0 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
100b0 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c  MemCompare(pIn3,
100c0 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70   pIn1, pOp->p4.p
100d0 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69  Coll);.  }.  swi
100e0 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
100f0 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f   ){.    case OP_
10100 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Eq:    res = res
10110 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  ==0;     break;.
10120 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20      case OP_Ne: 
10130 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b     res = res!=0;
10140 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
10150 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72  case OP_Lt:    r
10160 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20  es = res<0;     
10170 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
10180 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d   OP_Le:    res =
10190 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65   res<=0;     bre
101a0 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
101b0 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Gt:    res = res
101c0 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  >0;      break;.
101d0 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
101e0 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b     res = res>=0;
101f0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a       break;.  }.
10200 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63  .  /* Undo any c
10210 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61  hanges made by a
10220 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74  pplyAffinity() t
10230 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
10240 73 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65  sters. */.  asse
10250 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
10260 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28   & MEM_Dyn) == (
10270 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e  flags1 & MEM_Dyn
10280 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  ) );.  pIn1->fla
10290 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61  gs = flags1;.  a
102a0 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
102b0 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d  ags & MEM_Dyn) =
102c0 3d 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  = (flags3 & MEM_
102d0 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e  Dyn) );.  pIn3->
102e0 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a  flags = flags3;.
102f0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
10300 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
10310 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61  ){.    pOut = &a
10320 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10330 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
10340 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
10350 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
10360 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
10370 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
10380 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45  res;.    REGISTE
10390 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
103a0 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b   pOut);.  }else{
103b0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
103c0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f  aken(res!=0, (pO
103d0 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
103e0 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20  ULLEQ)?2:3);.   
103f0 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
10400 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
10410 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  2;.    }.  }.  b
10420 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
10430 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20  de: Permutation 
10440 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
10450 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61   Set the permuta
10460 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
10470 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72   OP_Compare oper
10480 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61  ator to be the a
10490 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  rray.** of integ
104a0 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a  ers in P4..**.**
104b0 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
104c0 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75   is only valid u
104d0 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50  ntil the next OP
104e0 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68 61  _Compare that ha
104f0 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  s.** the OPFLAG_
10500 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 20  PERMUTE bit set 
10510 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c 79  in P5. Typically
10520 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74   the OP_Permutat
10530 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f  ion should .** o
10540 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  ccur immediately
10550 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50   prior to the OP
10560 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73  _Compare..*/.cas
10570 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
10580 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
10590 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
105a0 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65  TARRAY );.  asse
105b0 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29  rt( pOp->p4.ai )
105c0 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70  ;.  aPermute = p
105d0 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65  Op->p4.ai;.  bre
105e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
105f0 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  : Compare P1 P2 
10600 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
10610 70 73 69 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c  psis: r[P1@P3] <
10620 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a  -> r[P2@P3].**.*
10630 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65  * Compare two ve
10640 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65  ctors of registe
10650 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72  rs in reg(P1)..r
10660 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c  eg(P1+P3-1) (cal
10670 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72  l this.** vector
10680 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67   "A") and in reg
10690 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d  (P2)..reg(P2+P3-
106a0 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65 20  1) ("B").  Save 
106b0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a  the result of.**
106c0 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
106d0 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6e  for use by the n
106e0 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74  ext OP_Jump inst
106f0 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ruct..**.** If P
10700 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47  5 has the OPFLAG
10710 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74  _PERMUTE bit set
10720 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72  , then the order
10730 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
10740 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20  s.** determined 
10750 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  by the most rece
10760 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  nt OP_Permutatio
10770 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66 20  n operator.  If 
10780 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45  the.** OPFLAG_PE
10790 52 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c 65  RMUTE bit is cle
107a0 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74 65  ar, then registe
107b0 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69  r are compared i
107c0 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20  n sequential.** 
107d0 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  order..**.** P4 
107e0 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  is a KeyInfo str
107f0 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69  ucture that defi
10800 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  nes collating se
10810 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74  quences and sort
10820 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74  .** orders for t
10830 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
10840 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
10850 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73  applies to regis
10860 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ters.** only.  T
10870 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65  he KeyInfo eleme
10880 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71  nts are used seq
10890 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  uentially..**.**
108a0 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   The comparison 
108b0 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72  is a sort compar
108c0 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63  ison, so NULLs c
108d0 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a  ompare equal,.**
108e0 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20   NULLs are less 
108f0 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75  than numbers, nu
10900 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74  mbers are less t
10910 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20  han strings,.** 
10920 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
10930 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
10940 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70  .*/.case OP_Comp
10950 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  are: {.  int n;.
10960 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70    int i;.  int p
10970 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63  1;.  int p2;.  c
10980 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  onst KeyInfo *pK
10990 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64  eyInfo;.  int id
109a0 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  x;.  CollSeq *pC
109b0 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  oll;    /* Colla
109c0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f  ting sequence to
109d0 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72   use on this ter
109e0 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b  m */.  int bRev;
109f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
10a00 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47  e for DESCENDING
10a10 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a   sort order */..
10a20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26    if( (pOp->p5 &
10a30 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29   OPFLAG_PERMUTE)
10a40 3d 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20 3d  ==0 ) aPermute =
10a50 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70   0;.  n = pOp->p
10a60 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  3;.  pKeyInfo = 
10a70 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
10a80 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
10a90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65  );.  assert( pKe
10aa0 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31  yInfo!=0 );.  p1
10ab0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
10ac0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20   = pOp->p2;.#if 
10ad0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
10ae0 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20  f( aPermute ){. 
10af0 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30     int k, mx = 0
10b00 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b  ;.    for(k=0; k
10b10 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65  <n; k++) if( aPe
10b20 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78  rmute[k]>mx ) mx
10b30 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a   = aPermute[k];.
10b40 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
10b50 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e   && p1+mx<=(p->n
10b60 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
10b70 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
10b80 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d   p2>0 && p2+mx<=
10b90 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
10ba0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73  sor)+1 );.  }els
10bb0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
10bc0 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d  1>0 && p1+n<=(p-
10bd0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
10be0 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  )+1 );.    asser
10bf0 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c  t( p2>0 && p2+n<
10c00 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
10c10 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23  rsor)+1 );.  }.#
10c20 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
10c30 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69  DEBUG */.  for(i
10c40 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20  =0; i<n; i++){. 
10c50 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74     idx = aPermut
10c60 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20  e ? aPermute[i] 
10c70 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  : i;.    assert(
10c80 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
10c90 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p1+idx]) );.  
10ca0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
10cb0 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64  alid(&aMem[p2+id
10cc0 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  x]) );.    REGIS
10cd0 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78  TER_TRACE(p1+idx
10ce0 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  , &aMem[p1+idx])
10cf0 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
10d00 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d  RACE(p2+idx, &aM
10d10 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p2+idx]);.   
10d20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49   assert( i<pKeyI
10d30 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20  nfo->nField );. 
10d40 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49     pColl = pKeyI
10d50 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20  nfo->aColl[i];. 
10d60 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e     bRev = pKeyIn
10d70 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69  fo->aSortOrder[i
10d80 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20  ];.    iCompare 
10d90 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
10da0 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  are(&aMem[p1+idx
10db0 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  ], &aMem[p2+idx]
10dc0 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66  , pColl);.    if
10dd0 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20  ( iCompare ){.  
10de0 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20 69      if( bRev ) i
10df0 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70  Compare = -iComp
10e00 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  are;.      break
10e10 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50  ;.    }.  }.  aP
10e20 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72  ermute = 0;.  br
10e30 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
10e40 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33  e: Jump P1 P2 P3
10e50 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
10e60 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69  to the instructi
10e70 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50 31  on at address P1
10e80 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65  , P2, or P3 depe
10e90 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
10ea0 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20  .** in the most 
10eb0 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72  recent OP_Compar
10ec0 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  e instruction th
10ed0 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73 20  e P1 vector was 
10ee0 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75  less than.** equ
10ef0 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65  al to, or greate
10f00 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76 65  r than the P2 ve
10f10 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65  ctor, respective
10f20 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a  ly..*/.case OP_J
10f30 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ump: {          
10f40 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
10f50 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29  if( iCompare<0 )
10f60 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
10f70 54 61 6b 65 6e 28 30 2c 33 29 3b 20 70 4f 70 20  Taken(0,3); pOp 
10f80 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 31 20 2d  = &aOp[pOp->p1 -
10f90 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   1];.  }else if(
10fa0 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a   iCompare==0 ){.
10fb0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
10fc0 6b 65 6e 28 31 2c 33 29 3b 20 70 4f 70 20 3d 20  ken(1,3); pOp = 
10fd0 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31  &aOp[pOp->p2 - 1
10fe0 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
10ff0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
11000 32 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70  2,3); pOp = &aOp
11010 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a 20  [pOp->p3 - 1];. 
11020 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11030 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31  * Opcode: And P1
11040 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
11050 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72  nopsis: r[P3]=(r
11060 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a  [P1] && r[P2]).*
11070 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f  *.** Take the lo
11080 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65  gical AND of the
11090 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
110a0 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20 61  ters P1 and P2 a
110b0 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20  nd.** write the 
110c0 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69  result into regi
110d0 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
110e0 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50  f either P1 or P
110f0 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20 74  2 is 0 (false) t
11100 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
11110 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74  s 0 even if.** t
11120 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
11130 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
11140 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20  and true or two 
11150 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20  NULLs give.** a 
11160 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  NULL output..*/.
11170 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31  /* Opcode: Or P1
11180 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
11190 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72  nopsis: r[P3]=(r
111a0 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a  [P1] || r[P2]).*
111b0 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f  *.** Take the lo
111c0 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20  gical OR of the 
111d0 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
111e0 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
111f0 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e  .** store the an
11200 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  swer in register
11210 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69   P3..**.** If ei
11220 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73  ther P1 or P2 is
11230 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20   nonzero (true) 
11240 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
11250 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65  is 1 (true).** e
11260 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72  ven if the other
11270 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
11280 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73   A NULL and fals
11290 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a  e or two NULLs.*
112a0 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75  * give a NULL ou
112b0 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tput..*/.case OP
112c0 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20  _And:           
112d0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
112e0 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  _AND, in1, in2, 
112f0 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
11300 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  Or: {           
11310 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
11320 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
11330 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20  t3 */.  int v1; 
11340 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61     /* Left opera
11350 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31  nd:  0==FALSE, 1
11360 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
11370 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  WN or NULL */.  
11380 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69  int v2;    /* Ri
11390 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d  ght operand: 0==
113a0 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
113b0 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
113c0 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  LL */..  pIn1 = 
113d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
113e0 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
113f0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
11400 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65      v1 = 2;.  }e
11410 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71  lse{.    v1 = sq
11420 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
11430 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a  e(pIn1)!=0;.  }.
11440 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
11450 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70  Op->p2];.  if( p
11460 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
11470 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20  _Null ){.    v2 
11480 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 2;.  }else{.  
11490 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64    v2 = sqlite3Vd
114a0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
114b0 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  !=0;.  }.  if( p
114c0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41  Op->opcode==OP_A
114d0 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63  nd ){.    static
114e0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
114f0 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d  char and_logic[]
11500 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c   = { 0, 0, 0, 0,
11510 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d   1, 2, 0, 2, 2 }
11520 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c  ;.    v1 = and_l
11530 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20  ogic[v1*3+v2];. 
11540 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74   }else{.    stat
11550 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
11560 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b  d char or_logic[
11570 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31  ] = { 0, 1, 2, 1
11580 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20  , 1, 1, 2, 1, 2 
11590 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c  };.    v1 = or_l
115a0 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20  ogic[v1*3+v2];. 
115b0 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65   }.  pOut = &aMe
115c0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
115d0 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d  ( v1==2 ){.    M
115e0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
115f0 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
11600 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74   }else{.    pOut
11610 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20  ->u.i = v1;.    
11620 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
11630 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
11640 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11650 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31  * Opcode: Not P1
11660 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
11670 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72  opsis: r[P2]= !r
11680 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  [P1].**.** Inter
11690 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69  pret the value i
116a0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  n register P1 as
116b0 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
116c0 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
116d0 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65  boolean compleme
116e0 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  nt in register P
116f0 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  2.  If the value
11700 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
11710 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
11720 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72  n a NULL is stor
11730 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ed in P2..*/.cas
11740 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20  e OP_Not: {     
11750 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
11760 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e  me as TK_NOT, in
11770 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
11780 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
11790 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
117a0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
117b0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
117c0 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66  Null(pOut);.  if
117d0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
117e0 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
117f0 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
11800 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
11810 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71 6c  pOut->u.i = !sql
11820 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
11830 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
11840 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11850 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20  e: BitNot P1 P2 
11860 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
11870 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d  s: r[P1]= ~r[P1]
11880 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
11890 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
118a0 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
118b0 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72  n integer.  Stor
118c0 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f  e the.** ones-co
118d0 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20  mplement of the 
118e0 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  P1 value into re
118f0 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50  gister P2.  If P
11900 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c  1 holds.** a NUL
11910 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e  L then store a N
11920 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  ULL in P2..*/.ca
11930 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20  se OP_BitNot: { 
11940 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
11950 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54  ame as TK_BITNOT
11960 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
11970 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
11980 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
11990 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
119a0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
119b0 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
119c0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
119d0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
119e0 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  0 ){.    pOut->f
119f0 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
11a00 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
11a10 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  ~sqlite3VdbeIntV
11a20 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  alue(pIn1);.  }.
11a30 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11a40 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50  pcode: Once P1 P
11a50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68  2 * * *.**.** Ch
11a60 65 63 6b 20 74 68 65 20 22 6f 6e 63 65 22 20 66  eck the "once" f
11a70 6c 61 67 20 6e 75 6d 62 65 72 20 50 31 2e 20 49  lag number P1. I
11a80 66 20 69 74 20 69 73 20 73 65 74 2c 20 6a 75 6d  f it is set, jum
11a90 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
11aa0 20 50 32 2e 20 0a 2a 2a 20 4f 74 68 65 72 77 69   P2. .** Otherwi
11ab0 73 65 2c 20 73 65 74 20 74 68 65 20 66 6c 61 67  se, set the flag
11ac0 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
11ad0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
11ae0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e  struction..** In
11af0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
11b00 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73  is opcode causes
11b10 20 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f   all following o
11b20 70 63 6f 64 65 73 20 75 70 20 74 68 72 6f 75 67  pcodes up throug
11b30 68 20 50 32 0a 2a 2a 20 28 62 75 74 20 6e 6f 74  h P2.** (but not
11b40 20 69 6e 63 6c 75 64 69 6e 67 20 50 32 29 20 74   including P2) t
11b50 6f 20 72 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20  o run just once 
11b60 61 6e 64 20 74 6f 20 62 65 20 73 6b 69 70 70 65  and to be skippe
11b70 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 0a  d on subsequent.
11b80 2a 2a 20 74 69 6d 65 73 20 74 68 72 6f 75 67 68  ** times through
11b90 20 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a   the loop..**.**
11ba0 20 41 6c 6c 20 22 6f 6e 63 65 22 20 66 6c 61 67   All "once" flag
11bb0 73 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  s are initially 
11bc0 63 6c 65 61 72 65 64 20 77 68 65 6e 65 76 65 72  cleared whenever
11bd0 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74   a prepared stat
11be0 65 6d 65 6e 74 0a 2a 2a 20 66 69 72 73 74 20 62  ement.** first b
11bf0 65 67 69 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f  egins to run..*/
11c00 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b  .case OP_Once: {
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11c20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
11c30 28 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e  ( pOp->p1<p->nOn
11c40 63 65 46 6c 61 67 20 29 3b 0a 20 20 56 64 62 65  ceFlag );.  Vdbe
11c50 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61  BranchTaken(p->a
11c60 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31  OnceFlag[pOp->p1
11c70 5d 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  ]!=0, 2);.  if( 
11c80 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70  p->aOnceFlag[pOp
11c90 2d 3e 70 31 5d 20 29 7b 0a 20 20 20 20 67 6f 74  ->p1] ){.    got
11ca0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
11cb0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f  }else{.    p->aO
11cc0 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
11cd0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
11ce0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11cf0 20 49 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a   If P1 P2 P3 * *
11d00 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
11d10 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
11d20 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
11d30 20 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75   true.  The valu
11d40 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72  e.** is consider
11d50 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73  ed true if it is
11d60 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e   numeric and non
11d70 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76  -zero.  If the v
11d80 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
11d90 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
11da0 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20  the jump if and 
11db0 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f  only if P3 is no
11dc0 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70  n-zero..*/./* Op
11dd0 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50  code: IfNot P1 P
11de0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
11df0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
11e00 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
11e10 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20  er P1 is False. 
11e20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
11e30 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73   considered fals
11e40 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75  e if it has a nu
11e50 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a  meric value of z
11e60 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
11e70 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
11e80 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
11e90 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e  e jump if and on
11ea0 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  ly if P3 is non-
11eb0 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
11ec0 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20  _If:            
11ed0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
11ee0 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  1 */.case OP_IfN
11ef0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
11f00 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
11f10 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31  .  int c;.  pIn1
11f20 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11f30 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
11f40 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
11f50 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e  ){.    c = pOp->
11f60 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66  p3;.  }else{.#if
11f70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
11f80 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
11f90 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64     c = sqlite3Vd
11fa0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
11fb0 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63  !=0;.#else.    c
11fc0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
11fd0 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  alValue(pIn1)!=0
11fe0 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  .0;.#endif.    i
11ff0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
12000 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21  OP_IfNot ) c = !
12010 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  c;.  }.  VdbeBra
12020 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32  nchTaken(c!=0, 2
12030 29 3b 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20  );.  if( c ){.  
12040 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
12050 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
12060 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73  }../* Opcode: Is
12070 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
12080 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
12090 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f  f r[P1]==NULL go
120a0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  to P2.**.** Jump
120b0 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
120c0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
120d0 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  P1 is NULL..*/.c
120e0 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b  ase OP_IsNull: {
120f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
12100 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c  ame as TK_ISNULL
12110 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  , jump, in1 */. 
12120 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
12130 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72  p->p1];.  VdbeBr
12140 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31  anchTaken( (pIn1
12150 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
12160 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66  ll)!=0, 2);.  if
12170 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
12180 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b   MEM_Null)!=0 ){
12190 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
121a0 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
121b0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
121c0 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a   NotNull P1 P2 *
121d0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
121e0 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c  : if r[P1]!=NULL
121f0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a   goto P2.**.** J
12200 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
12210 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
12220 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c  er P1 is not NUL
12230 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  L.  .*/.case OP_
12240 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  NotNull: {      
12250 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
12260 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d   TK_NOTNULL, jum
12270 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
12280 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
12290 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
122a0 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
122b0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
122c0 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
122d0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
122e0 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
122f0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
12300 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
12310 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75  ./* Opcode: Colu
12320 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  mn P1 P2 P3 P4 P
12330 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  5.** Synopsis:  
12340 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49  r[P3]=PX.**.** I
12350 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74  nterpret the dat
12360 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  a that cursor P1
12370 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20   points to as a 
12380 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20  structure built 
12390 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b  using.** the Mak
123a0 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
123b0 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d  ion.  (See the M
123c0 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
123d0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a   for additional.
123e0 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
123f0 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20  bout the format 
12400 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45  of the data.)  E
12410 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68  xtract the P2-th
12420 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20   column.** from 
12430 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66  this record.  If
12440 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20   there are less 
12450 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20  that (P2+1) .** 
12460 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65  values in the re
12470 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20  cord, extract a 
12480 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
12490 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20  value extracted 
124a0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
124b0 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
124c0 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f  If the column co
124d0 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61  ntains fewer tha
124e0 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65  n P2 fields, the
124f0 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  n extract a NULL
12500 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65  .  Or,.** if the
12510 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
12520 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65  a P4_MEM use the
12530 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34   value of the P4
12540 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20   argument as.** 
12550 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a  the result..**.*
12560 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
12570 43 4c 45 41 52 43 41 43 48 45 20 62 69 74 20 69  CLEARCACHE bit i
12580 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20  s set on P5 and 
12590 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74  P1 is a pseudo-t
125a0 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20  able cursor,.** 
125b0 74 68 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f  then the cache o
125c0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
125d0 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65  reset prior to e
125e0 78 74 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f  xtracting the co
125f0 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72  lumn..** The fir
12600 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61  st OP_Column aga
12610 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61  inst a pseudo-ta
12620 62 6c 65 20 61 66 74 65 72 20 74 68 65 20 76 61  ble after the va
12630 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  lue of the conte
12640 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68  nt.** register h
12650 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c  as changed shoul
12660 64 20 68 61 76 65 20 74 68 69 73 20 62 69 74 20  d have this bit 
12670 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  set..**.** If th
12680 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  e OPFLAG_LENGTHA
12690 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
126a0 50 45 4f 46 41 52 47 20 62 69 74 73 20 61 72 65  PEOFARG bits are
126b0 20 73 65 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a   set on P5 when.
126c0 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ** the result is
126d0 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f   guaranteed to o
126e0 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73 20 74  nly be used as t
126f0 68 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61  he argument of a
12700 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20   length().** or 
12710 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
12720 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  n, respectively.
12730 20 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66    The loading of
12740 20 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e   large blobs can
12750 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66   be.** skipped f
12760 6f 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20  or length() and 
12770 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64  all content load
12780 69 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70  ing can be skipp
12790 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e  ed for typeof().
127a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75  .*/.case OP_Colu
127b0 6d 6e 3a 20 7b 0a 20 20 69 36 34 20 70 61 79 6c  mn: {.  i64 payl
127c0 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75  oadSize64; /* Nu
127d0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
127e0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
127f0 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
12800 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75      /* column nu
12810 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65  mber to retrieve
12820 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
12830 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20   *pC;    /* The 
12840 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20  VDBE cursor */. 
12850 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
12860 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65  ;   /* The BTree
12870 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32   cursor */.  u32
12880 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *aOffset;      
12890 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73  /* aOffset[i] is
128a0 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74   offset to start
128b0 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74   of data for i-t
128c0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  h column */.  in
128d0 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
128e0 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f   /* The length o
128f0 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64  f the serialized
12900 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f   data for the co
12910 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  lumn */.  int i;
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12930 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
12940 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20    Mem *pDest;   
12950 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f       /* Where to
12960 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61   write the extra
12970 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20  cted value */.  
12980 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
12990 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
129a0 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
129b0 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
129c0 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61 3b  const u8 *zData;
129d0 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68     /* Part of th
129e0 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
129f0 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
12a00 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f  t u8 *zHdr;    /
12a10 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64 20  * Next unparsed 
12a20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65 61 64  byte of the head
12a30 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  er */.  const u8
12a40 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f   *zEndHdr; /* Po
12a50 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62  inter to first b
12a60 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65  yte after the he
12a70 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66  ader */.  u32 of
12a80 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  fset;        /* 
12a90 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20  Offset into the 
12aa0 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a  data */.  u32 sz
12ab0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20  Field;       /* 
12ac0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
12ad0 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  in the content o
12ae0 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20 75  f a field */.  u
12af0 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20  32 avail;       
12b00 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
12b10 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c  ytes of availabl
12b20 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20  e data */.  u32 
12b30 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
12b40 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66 72  * A type code fr
12b50 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  om the record he
12b60 61 64 65 72 20 2a 2f 0a 20 20 75 31 36 20 66 78  ader */.  u16 fx
12b70 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12b80 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 76 61 6c  pDest->flags val
12b90 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65  ue */.  Mem *pRe
12ba0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73  g;         /* Ps
12bb0 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20  eudoTable input 
12bc0 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70  register */..  p
12bd0 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  2 = pOp->p2;.  a
12be0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
12bf0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
12c00 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
12c10 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26  ) );.  pDest = &
12c20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
12c30 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
12c40 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 61  e(p, pDest);.  a
12c50 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
12c60 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
12c70 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
12c80 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
12c90 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
12ca0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
12cb0 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20  ( p2<pC->nField 
12cc0 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70  );.  aOffset = p
12cd0 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 23 69 66 6e  C->aOffset;.#ifn
12ce0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
12cf0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61  VIRTUALTABLE.  a
12d00 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62  ssert( pC->pVtab
12d10 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a 20  Cursor==0 ); /* 
12d20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65 72 20  OP_Column never 
12d30 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72 74 75 61  called on virtua
12d40 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69  l table */.#endi
12d50 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  f.  pCrsr = pC->
12d60 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
12d70 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70  t( pCrsr!=0 || p
12d80 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
12d90 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72 73 72 20  g>0 ); /* pCrsr 
12da0 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64 6f 54 61  NULL on PseudoTa
12db0 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  bles */.  assert
12dc0 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43  ( pCrsr!=0 || pC
12dd0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20 20 20 20  ->nullRow );    
12de0 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 6e 75 6c        /* pC->nul
12df0 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64 6f 54 61  lRow on PseudoTa
12e00 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  bles */..  /* If
12e10 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63 68   the cursor cach
12e20 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69 6e  e is stale, brin
12e30 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20  g it up-to-date 
12e40 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
12e50 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
12e60 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20  o(pC);.  if( rc 
12e70 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
12e80 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
12e90 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
12ea0 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b  !=p->cacheCtr ){
12eb0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  .    if( pC->nul
12ec0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66  lRow ){.      if
12ed0 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20  ( pCrsr==0 ){.  
12ee0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
12ef0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
12f00 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52  >0 );.        pR
12f10 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70  eg = &aMem[pC->p
12f20 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a  seudoTableReg];.
12f30 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
12f40 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pReg->flags & ME
12f50 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20  M_Blob );.      
12f60 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
12f70 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20  alid(pReg) );.  
12f80 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61        pC->payloa
12f90 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f  dSize = pC->szRo
12fa0 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65 67  w = avail = pReg
12fb0 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ->n;.        pC-
12fc0 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65  >aRow = (u8*)pRe
12fd0 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73  g->z;.      }els
12fe0 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
12ff0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
13000 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20  (pDest);.       
13010 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
13020 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
13030 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
13040 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
13050 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54       if( pC->isT
13060 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20  able==0 ){.     
13070 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
13080 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
13090 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
130a0 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28         VVA_ONLY(
130b0 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
130c0 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c  eeKeySize(pCrsr,
130d0 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29   &payloadSize64)
130e0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
130f0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
13100 29 3b 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75  ); /* True becau
13110 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65  se of CursorMove
13120 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20  to() call above 
13130 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71  */.        /* sq
13140 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65 43  lite3BtreeParseC
13150 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67 65  ellPtr() uses ge
13160 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65  tVarint32() to e
13170 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20 20  xtract the.     
13180 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69     ** payload si
13190 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70  ze, so it is imp
131a0 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c  ossible for payl
131b0 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a  oadSize64 to be.
131c0 20 20 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65          ** large
131d0 72 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20  r than 32 bits. 
131e0 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
131f0 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36  t( (payloadSize6
13200 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  4 & SQLITE_MAX_U
13210 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61  32)==(u64)payloa
13220 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20  dSize64 );.     
13230 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71     pC->aRow = sq
13240 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74  lite3BtreeKeyFet
13250 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
13260 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  );.        pC->p
13270 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33  ayloadSize = (u3
13280 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  2)payloadSize64;
13290 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
132a0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
132b0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
132c0 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
132d0 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e  ;.        VVA_ON
132e0 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
132f0 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
13300 72 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61  rsr, &pC->payloa
13310 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 20 20  dSize);.        
13320 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
13330 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61  TE_OK );   /* Da
13340 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20  taSize() cannot 
13350 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20  fail */.        
13360 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74  pC->aRow = sqlit
13370 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68  e3BtreeDataFetch
13380 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
13390 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
133a0 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36 35  ssert( avail<=65
133b0 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d  536 );  /* Maxim
133c0 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73 20  um page size is 
133d0 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20 69  64KiB */.      i
133e0 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  f( pC->payloadSi
133f0 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c  ze <= (u32)avail
13400 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   ){.        pC->
13410 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c  szRow = pC->payl
13420 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d  oadSize;.      }
13430 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43  else{.        pC
13440 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b  ->szRow = avail;
13450 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
13460 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  f( pC->payloadSi
13470 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c  ze > (u32)db->aL
13480 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
13490 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
134a0 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
134b0 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  g;.      }.    }
134c0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
134d0 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43  atus = p->cacheC
134e0 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72  tr;.    pC->iHdr
134f0 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61 72 69  Offset = getVari
13500 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f  nt32(pC->aRow, o
13510 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e  ffset);.    pC->
13520 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a  nHdrParsed = 0;.
13530 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d      aOffset[0] =
13540 20 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a   offset;..    /*
13550 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72   Make sure a cor
13560 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61  rupt database ha
13570 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61  s not given us a
13580 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65  n oversize heade
13590 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  r..    ** Do thi
135a0 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
135b0 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
135c0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
135d0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65    **.    ** Type
135e0 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20   entries can be 
135f0 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20  between 1 and 5 
13600 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74  bytes each.  But
13610 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20   4 and 5 byte.  
13620 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
13630 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
13640 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
13650 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
13660 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74  d 32 of.    ** t
13670 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  hem, respectivel
13680 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d  y.  So the maxim
13690 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  um header length
136a0 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a   results from a.
136b0 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79      ** 3-byte ty
136c0 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  pe for each of t
136d0 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32  he maximum of 32
136e0 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73  768 columns plus
136f0 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78   three.    ** ex
13700 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68  tra bytes for th
13710 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  e header length 
13720 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33  itself.  32768*3
13730 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20   + 3 = 98307..  
13740 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66    */.    if( off
13750 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f  set > 98307 || o
13760 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c  ffset > pC->payl
13770 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20  oadSize ){.     
13780 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
13790 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
137a0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
137b0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20  error;.    }..  
137c0 20 20 69 66 28 20 61 76 61 69 6c 3c 6f 66 66 73    if( avail<offs
137d0 65 74 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 70  et ){.      /* p
137e0 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74  C->aRow does not
137f0 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74 68   have to hold th
13800 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62 75  e entire row, bu
13810 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65 61  t it does at lea
13820 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65 64  st.      ** need
13830 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65   to cover the he
13840 61 64 65 72 20 6f 66 20 74 68 65 20 72 65 63 6f  ader of the reco
13850 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f 77  rd.  If pC->aRow
13860 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
13870 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63  n.      ** the c
13880 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c 20  omplete header, 
13890 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20 7a  then set it to z
138a0 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68 65  ero, forcing the
138b0 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20 20   header to be.  
138c0 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c      ** dynamical
138d0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f  ly allocated. */
138e0 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20  .      pC->aRow 
138f0 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73  = 0;.      pC->s
13900 7a 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  zRow = 0;.    }.
13910 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  .    /* The foll
13920 6f 77 69 6e 67 20 67 6f 74 6f 20 69 73 20 61 6e  owing goto is an
13930 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20 20   optimization.  
13940 49 74 20 63 61 6e 20 62 65 20 6f 6d 69 74 74 65  It can be omitte
13950 64 20 61 6e 64 0a 20 20 20 20 2a 2a 20 65 76 65  d and.    ** eve
13960 72 79 74 68 69 6e 67 20 77 69 6c 6c 20 73 74 69  rything will sti
13970 6c 6c 20 77 6f 72 6b 2e 20 20 42 75 74 20 4f 50  ll work.  But OP
13980 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d 65 61 73 75  _Column is measu
13990 72 61 62 6c 79 20 66 61 73 74 65 72 0a 20 20 20  rably faster.   
139a0 20 2a 2a 20 62 79 20 73 6b 69 70 70 69 6e 67 20   ** by skipping 
139b0 74 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 63  the subsequent c
139c0 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20 77 68 69 63  onditional, whic
139d0 68 20 69 73 20 61 6c 77 61 79 73 20 74 72 75 65  h is always true
139e0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
139f0 65 72 74 28 20 70 43 2d 3e 6e 48 64 72 50 61 72  ert( pC->nHdrPar
13a00 73 65 64 3c 3d 70 32 20 29 3b 20 20 20 20 20 20  sed<=p2 );      
13a10 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 61     /* Conditiona
13a20 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20 20  l skipped */.   
13a30 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
13a40 72 65 61 64 5f 68 65 61 64 65 72 3b 0a 20 20 7d  read_header;.  }
13a50 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
13a60 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 66 69   at least the fi
13a70 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73  rst p2+1 entries
13a80 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 68   of the header h
13a90 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61  ave been.  ** pa
13aa0 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69  rsed and valid i
13ab0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e  nformation is in
13ac0 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 70   aOffset[] and p
13ad0 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f  C->aType[]..  */
13ae0 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50  .  if( pC->nHdrP
13af0 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20  arsed<=p2 ){.   
13b00 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
13b10 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76 61 69  more header avai
13b20 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e  lable for parsin
13b30 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  g in the record,
13b40 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65   try.    ** to e
13b50 78 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61  xtract additiona
13b60 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f  l fields up thro
13b70 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20  ugh the p2+1-th 
13b80 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20  field .    */.  
13b90 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64    op_column_read
13ba0 5f 68 65 61 64 65 72 3a 0a 20 20 20 20 69 66 28  _header:.    if(
13bb0 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c   pC->iHdrOffset<
13bc0 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20  aOffset[0] ){.  
13bd0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
13be0 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f   zData points to
13bf0 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72   enough of the r
13c00 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74  ecord to cover t
13c10 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20  he header. */.  
13c20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
13c30 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d  ==0 ){.        m
13c40 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20  emset(&sMem, 0, 
13c50 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20  sizeof(sMem));. 
13c60 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
13c70 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
13c80 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 61 4f  ree(pCrsr, 0, aO
13c90 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20 20 20 20  ffset[0], .     
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cc0 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26 73  !pC->isTable, &s
13cd0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69 66  Mem);.        if
13ce0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
13cf0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
13d00 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f  o op_column_erro
13d10 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
13d20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38       zData = (u8
13d30 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20  *)sMem.z;.      
13d40 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a  }else{.        z
13d50 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b  Data = pC->aRow;
13d60 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
13d70 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43 2d    /* Fill in pC-
13d80 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f  >aType[i] and aO
13d90 66 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73 20  ffset[i] values 
13da0 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d 74  through the p2-t
13db0 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20  h field. */.    
13dc0 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61    i = pC->nHdrPa
13dd0 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73  rsed;.      offs
13de0 65 74 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b  et = aOffset[i];
13df0 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44  .      zHdr = zD
13e00 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66  ata + pC->iHdrOf
13e10 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64  fset;.      zEnd
13e20 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f  Hdr = zData + aO
13e30 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20  ffset[0];.      
13e40 61 73 73 65 72 74 28 20 69 3c 3d 70 32 20 26 26  assert( i<=p2 &&
13e50 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b   zHdr<zEndHdr );
13e60 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
13e70 20 20 20 69 66 28 20 7a 48 64 72 5b 30 5d 3c 30     if( zHdr[0]<0
13e80 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  x80 ){.         
13e90 20 74 20 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20 20   t = zHdr[0];.  
13ea0 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a          zHdr++;.
13eb0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
13ec0 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d           zHdr +=
13ed0 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
13ee0 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20  t32(zHdr, &t);. 
13ef0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
13f00 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 3d 20   pC->aType[i] = 
13f10 74 3b 0a 20 20 20 20 20 20 20 20 73 7a 46 69 65  t;.        szFie
13f20 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ld = sqlite3Vdbe
13f30 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
13f40 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ;.        offset
13f50 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20   += szField;.   
13f60 20 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 3c       if( offset<
13f70 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54  szField ){  /* T
13f80 72 75 65 20 69 66 20 6f 66 66 73 65 74 20 6f 76  rue if offset ov
13f90 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20  erflows */.     
13fa0 20 20 20 20 20 7a 48 64 72 20 3d 20 26 7a 45 6e       zHdr = &zEn
13fb0 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72  dHdr[1];  /* For
13fc0 63 65 73 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ces SQLITE_CORRU
13fd0 50 54 20 72 65 74 75 72 6e 20 62 65 6c 6f 77 20  PT return below 
13fe0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  */.          bre
13ff0 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
14000 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20        i++;.     
14010 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
14020 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7d 77  offset;.      }w
14030 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a  hile( i<=p2 && z
14040 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20  Hdr<zEndHdr );. 
14050 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72       pC->nHdrPar
14060 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20 70  sed = i;.      p
14070 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
14080 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44 61  (u32)(zHdr - zDa
14090 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ta);.      if( p
140a0 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20  C->aRow==0 ){.  
140b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
140c0 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
140d0 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 4d 65 6d  m);.        sMem
140e0 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
140f0 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20  l;.      }.  .  
14100 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72      /* The recor
14110 64 20 69 73 20 63 6f 72 72 75 70 74 20 69 66 20  d is corrupt if 
14120 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  any of the follo
14130 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20  wing are true:. 
14140 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20       ** (1) the 
14150 62 79 74 65 73 20 6f 66 20 74 68 65 20 68 65 61  bytes of the hea
14160 64 65 72 20 65 78 74 65 6e 64 20 70 61 73 74 20  der extend past 
14170 74 68 65 20 64 65 63 6c 61 72 65 64 20 68 65 61  the declared hea
14180 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a  der size.      *
14190 2a 20 20 20 20 20 20 20 20 20 20 28 7a 48 64 72  *          (zHdr
141a0 3e 7a 45 6e 64 48 64 72 29 0a 20 20 20 20 20 20  >zEndHdr).      
141b0 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69 72  ** (2) the entir
141c0 65 20 68 65 61 64 65 72 20 77 61 73 20 75 73 65  e header was use
141d0 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61  d but not all da
141e0 74 61 20 77 61 73 20 75 73 65 64 0a 20 20 20 20  ta was used.    
141f0 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 28 7a    **          (z
14200 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20  Hdr==zEndHdr && 
14210 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70 61 79 6c  offset!=pC->payl
14220 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 2a  oadSize).      *
14230 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20 6f 66  * (3) the end of
14240 20 74 68 65 20 64 61 74 61 20 65 78 74 65 6e 64   the data extend
14250 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65 6e 64  s beyond the end
14260 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   of the record..
14270 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
14280 20 20 28 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e    (offset > pC->
14290 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20  payloadSize).   
142a0 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
142b0 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26  (zHdr>=zEndHdr &
142c0 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20  & (zHdr>zEndHdr 
142d0 7c 7c 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70  || offset!=pC->p
142e0 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20  ayloadSize)).   
142f0 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 20 3e      || (offset >
14300 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
14310 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  ).      ){.     
14320 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
14330 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
14340 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
14350 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  umn_error;.     
14360 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a   }.    }..    /*
14370 20 49 66 20 61 66 74 65 72 20 74 72 79 69 6e 67   If after trying
14380 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65 77 20   to extract new 
14390 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
143a0 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61 72   header, nHdrPar
143b0 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73 74  sed is.    ** st
143c0 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70 32  ill not up to p2
143d0 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
143e0 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  t the record has
143f0 20 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a 20   fewer than p2. 
14400 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20     ** columns.  
14410 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77 69  So the result wi
14420 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74 68 65  ll be either the
14430 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
14440 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f  r a NULL..    */
14450 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  .    if( pC->nHd
14460 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
14470 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34       if( pOp->p4
14480 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a  type==P4_MEM ){.
14490 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
144a0 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
144b0 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34  y(pDest, pOp->p4
144c0 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69  .pMem, MEM_Stati
144d0 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  c);.      }else{
144e0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
144f0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
14500 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Dest);.      }. 
14510 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
14520 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  umn_out;.    }. 
14530 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74   }..  /* Extract
14540 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72   the content for
14550 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c   the p2+1-th col
14560 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61  umn.  Control ca
14570 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63  n only.  ** reac
14580 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66 20  h this point if 
14590 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66  aOffset[p2], aOf
145a0 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20  fset[p2+1], and 
145b0 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61 72  pC->aType[p2] ar
145c0 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69 64  e.  ** all valid
145d0 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
145e0 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72 73   p2<pC->nHdrPars
145f0 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
14600 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
14610 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
14620 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
14630 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29 20  variants(pDest) 
14640 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
14650 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20 29  Dynamic(pDest) )
14660 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
14670 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
14680 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70   t = pC->aType[p
14690 32 5d 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a  2];.  if( pC->sz
146a0 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b  Row>=aOffset[p2+
146b0 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  1] ){.    /* Thi
146c0 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  s is the common 
146d0 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20 64  case where the d
146e0 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66  esired content f
146f0 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69  its on the origi
14700 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20  nal.    ** page 
14710 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74  - where the cont
14720 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e  ent is not on an
14730 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a   overflow page *
14740 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
14750 65 53 65 72 69 61 6c 47 65 74 28 70 43 2d 3e 61  eSerialGet(pC->a
14760 52 6f 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d 2c  Row+aOffset[p2],
14770 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 7d 65   t, pDest);.  }e
14780 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  lse{.    /* This
14790 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20   branch happens 
147a0 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e  only when conten
147b0 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77  t is on overflow
147c0 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66   pages */.    if
147d0 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f  ( ((pOp->p5 & (O
147e0 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c  PFLAG_LENGTHARG|
147f0 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
14800 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20  ))!=0.          
14810 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74  && ((t>=12 && (t
14820 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d  &1)==0) || (pOp-
14830 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50  >p5 & OPFLAG_TYP
14840 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20  EOFARG)!=0)).   
14850 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69    || (len = sqli
14860 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
14870 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20  eLen(t))==0.    
14880 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74  ){.      /* Cont
14890 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e  ent is irrelevan
148a0 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20  t for.      **  
148b0 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28    1. the typeof(
148c0 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20  ) function,.    
148d0 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c    **    2. the l
148e0 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f  ength(X) functio
148f0 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62  n if X is a blob
14900 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20  , and.      **  
14910 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74    3. if the cont
14920 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65  ent length is ze
14930 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20  ro..      ** So 
14940 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c  we might as well
14950 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65   use bogus conte
14960 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 72  nt rather than r
14970 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  eading.      ** 
14980 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73  content from dis
14990 6b 2e 20 20 4e 55 4c 4c 20 77 69 6c 6c 20 77 6f  k.  NULL will wo
149a0 72 6b 20 66 6f 72 20 74 68 65 20 76 61 6c 75 65  rk for the value
149b0 20 66 6f 72 20 73 74 72 69 6e 67 73 0a 20 20 20   for strings.   
149c0 20 20 20 2a 2a 20 61 6e 64 20 62 6c 6f 62 73 20     ** and blobs 
149d0 61 6e 64 20 77 68 61 74 65 76 65 72 20 69 73 20  and whatever is 
149e0 69 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53 69  in the payloadSi
149f0 7a 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20 20  ze64 variable.  
14a00 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72 6b      ** will work
14a10 20 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67 20   for everything 
14a20 65 6c 73 65 2e 20 2a 2f 0a 20 20 20 20 20 20 73  else. */.      s
14a30 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
14a40 47 65 74 28 74 3c 3d 31 33 20 3f 20 28 75 38 2a  Get(t<=13 ? (u8*
14a50 29 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  )&payloadSize64 
14a60 3a 20 30 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  : 0, t, pDest);.
14a70 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14a80 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
14a90 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
14aa0 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d  rsr, aOffset[p2]
14ab0 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54 61  , len, !pC->isTa
14ac0 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ble,.           
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ae0 20 20 20 20 20 20 20 20 70 44 65 73 74 29 3b 0a          pDest);.
14af0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
14b00 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
14b10 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
14b20 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  n_error;.      }
14b30 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
14b40 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e  beSerialGet((con
14b50 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c  st u8*)pDest->z,
14b60 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20   t, pDest);.    
14b70 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26    pDest->flags &
14b80 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20  = ~MEM_Ephem;.  
14b90 20 20 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74 2d    }.  }.  pDest-
14ba0 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
14bb0 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a  ..op_column_out:
14bc0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c  .  /* If the col
14bd0 75 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 6e 20  umn value is an 
14be0 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
14bf0 2c 20 67 6f 20 61 68 65 61 64 20 61 6e 64 20 70  , go ahead and p
14c00 65 72 73 69 73 74 0a 20 20 2a 2a 20 74 68 61 74  ersist.  ** that
14c10 20 73 74 72 69 6e 67 20 69 6e 20 63 61 73 65 20   string in case 
14c20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f 76 65 73  the cursor moves
14c30 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f 6c 75   before the colu
14c40 6d 6e 20 76 61 6c 75 65 20 69 73 0a 20 20 2a 2a  mn value is.  **
14c50 20 75 73 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c   used.  The foll
14c60 6f 77 69 6e 67 20 63 6f 64 65 20 64 6f 65 73 20  owing code does 
14c70 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  the equivalent o
14c80 66 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65  f Deephemeralize
14c90 28 29 0a 20 20 2a 2a 20 62 75 74 20 64 6f 65 73  ().  ** but does
14ca0 20 69 74 20 66 61 73 74 65 72 2e 20 2a 2f 0a 20   it faster. */. 
14cb0 20 69 66 28 20 28 70 44 65 73 74 2d 3e 66 6c 61   if( (pDest->fla
14cc0 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 21  gs & MEM_Ephem)!
14cd0 3d 30 20 26 26 20 70 44 65 73 74 2d 3e 7a 20 29  =0 && pDest->z )
14ce0 7b 0a 20 20 20 20 66 78 20 3d 20 70 44 65 73 74  {.    fx = pDest
14cf0 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
14d00 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20  tr|MEM_Blob);.  
14d10 20 20 61 73 73 65 72 74 28 20 66 78 21 3d 30 20    assert( fx!=0 
14d20 29 3b 0a 20 20 20 20 7a 44 61 74 61 20 3d 20 28  );.    zData = (
14d30 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d  const u8*)pDest-
14d40 3e 7a 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 70 44  >z;.    len = pD
14d50 65 73 74 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20  est->n;.    if( 
14d60 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
14d70 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 44 65  earAndResize(pDe
14d80 73 74 2c 20 6c 65 6e 2b 32 29 20 29 20 67 6f 74  st, len+2) ) got
14d90 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 6d 65  o no_mem;.    me
14da0 6d 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a  mcpy(pDest->z, z
14db0 44 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20  Data, len);.    
14dc0 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20  pDest->z[len] = 
14dd0 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  0;.    pDest->z[
14de0 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20  len+1] = 0;.    
14df0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 66  pDest->flags = f
14e00 78 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a  x|MEM_Term;.  }.
14e10 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3a  op_column_error:
14e20 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
14e30 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20  OBSIZE(pDest);. 
14e40 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
14e50 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b  pOp->p3, pDest);
14e60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
14e70 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79  Opcode: Affinity
14e80 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
14e90 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e   Synopsis: affin
14ea0 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  ity(r[P1@P2]).**
14eb0 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69  .** Apply affini
14ec0 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20  ties to a range 
14ed0 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20  of P2 registers 
14ee0 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31  starting with P1
14ef0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
14f00 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
14f10 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
14f20 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  g. The nth chara
14f30 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
14f40 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
14f50 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
14f60 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
14f70 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
14f80 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  nth.** memory ce
14f90 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e  ll in the range.
14fa0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69  .*/.case OP_Affi
14fb0 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20  nity: {.  const 
14fc0 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
14fd0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
14fe0 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
14ff0 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66 3b   */.  char cAff;
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15010 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72 61  * A single chara
15020 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74 79  cter of affinity
15030 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79   */..  zAffinity
15040 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
15050 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
15060 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y!=0 );.  assert
15070 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d  ( zAffinity[pOp-
15080 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  >p2]==0 );.  pIn
15090 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
150a0 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 41  1];.  while( (cA
150b0 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79  ff = *(zAffinity
150c0 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 61  ++))!=0 ){.    a
150d0 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26  ssert( pIn1 <= &
150e0 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  p->aMem[(p->nMem
150f0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b  -p->nCursor)] );
15100 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
15110 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
15120 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
15130 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65  ty(pIn1, cAff, e
15140 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49  ncoding);.    pI
15150 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
15160 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15170 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
15180 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
15190 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72  opsis: r[P3]=mkr
151a0 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ec(r[P1@P2]).**.
151b0 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
151c0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
151d0 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
151e0 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
151f0 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
15200 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
15210 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
15220 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
15230 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
15240 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
15250 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
15260 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
15270 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
15280 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
15290 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
152a0 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72  g.  The nth char
152b0 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
152c0 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
152d0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
152e0 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
152f0 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
15300 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66   nth.** field of
15310 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
15320 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
15330 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
15340 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
15350 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
15360 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
15370 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
15380 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
15390 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
153a0 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
153b0 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
153c0 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a  finity BLOB..*/.
153d0 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
153e0 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
153f0 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
15400 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
15410 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
15420 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
15430 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
15440 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
15450 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
15460 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
15470 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15480 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
15490 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
154a0 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
154b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
154c0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
154d0 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
154e0 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
154f0 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
15500 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
15510 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
15520 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20   i64 nZero;     
15530 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15540 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
15550 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
15560 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
15570 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
15580 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15590 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
155a0 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
155b0 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
155c0 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
155d0 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
155e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
155f0 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
15600 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
15610 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
15620 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
15630 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
15640 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
15650 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
15660 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15670 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
15680 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
15690 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
156a0 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
156b0 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
156c0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
156d0 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
156e0 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
156f0 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
15700 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
15710 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
15720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
15730 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
15740 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
15750 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
15760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
15770 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
15780 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
15790 74 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  t */.  int len; 
157a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
157b0 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
157c0 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
157d0 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
157e0 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
157f0 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
15800 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
15810 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
15820 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
15830 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15840 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15850 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15860 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
15870 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
15880 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
15890 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
158a0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
158b0 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
158c0 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
158d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
158e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
158f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15900 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
15910 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
15920 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
15930 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
15940 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
15950 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
15960 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
15970 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
15980 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
15990 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
159a0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
159b0 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
159c0 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
159d0 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
159e0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
159f0 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
15a00 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
15a10 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
15a20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
15a30 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
15a40 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
15a50 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
15a60 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
15a70 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
15a80 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
15a90 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
15aa0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
15ab0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15ac0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
15ad0 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
15ae0 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
15af0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
15b00 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
15b10 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
15b20 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
15b30 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
15b40 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
15b50 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
15b60 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
15b70 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
15b80 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ield<=(p->nMem-p
15b90 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
15ba0 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
15bb0 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
15bc0 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
15bd0 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
15be0 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
15bf0 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
15c00 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
15c10 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
15c20 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
15c30 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
15c40 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
15c50 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
15c60 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
15c70 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
15c80 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
15c90 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
15ca0 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
15cb0 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
15cc0 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
15cd0 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
15ce0 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
15cf0 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
15d00 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
15d10 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
15d20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
15d30 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b  yAffinity(pRec++
15d40 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
15d50 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
15d60 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69     assert( zAffi
15d70 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52  nity[0]==0 || pR
15d80 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20  ec<=pLast );.   
15d90 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69   }while( zAffini
15da0 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20  ty[0] );.  }..  
15db0 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20  /* Loop through 
15dc0 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61  the elements tha
15dd0 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74  t will make up t
15de0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67  he record to fig
15df0 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77  ure.  ** out how
15e00 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72   much space is r
15e10 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20  equired for the 
15e20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f  new record..  */
15e30 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b  .  pRec = pLast;
15e40 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
15e50 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
15e60 65 63 29 20 29 3b 0a 20 20 20 20 70 52 65 63 2d  ec) );.    pRec-
15e70 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f  >uTemp = serial_
15e80 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
15e90 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
15ea0 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b  c, file_format);
15eb0 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74  .    len = sqlit
15ec0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
15ed0 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
15ee0 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  ;.    if( pRec->
15ef0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
15f00 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44   ){.      if( nD
15f10 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ata ){.        s
15f20 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
15f30 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20  andBlob(pRec);. 
15f40 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
15f50 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
15f60 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
15f70 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d      len -= pRec-
15f80 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20  >u.nZero;.      
15f90 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74  }.    }.    nDat
15fa0 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65  a += len;.    te
15fb0 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74  stcase( serial_t
15fc0 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20  ype==127 );.    
15fd0 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c  testcase( serial
15fe0 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20  _type==128 );.  
15ff0 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c    nHdr += serial
16000 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a  _type<=127 ? 1 :
16010 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
16020 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a  n(serial_type);.
16030 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d 70 52 65    }while( (--pRe
16040 63 29 3e 3d 70 44 61 74 61 30 20 29 3b 0a 0a 20  c)>=pData0 );.. 
16050 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
16060 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54   R-22564-11647 T
16070 68 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73  he header begins
16080 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76   with a single v
16090 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68  arint.  ** which
160a0 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
160b0 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
160c0 62 79 74 65 73 20 69 6e 20 74 68 65 20 68 65 61  bytes in the hea
160d0 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a  der. The varint.
160e0 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68    ** value is th
160f0 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65  e size of the he
16100 61 64 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e  ader in bytes in
16110 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65  cluding the size
16120 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73   varint.  ** its
16130 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61  elf. */.  testca
16140 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b  se( nHdr==126 );
16150 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
16160 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20  r==127 );.  if( 
16170 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20  nHdr<=126 ){.   
16180 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63   /* The common c
16190 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20  ase */.    nHdr 
161a0 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  += 1;.  }else{. 
161b0 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20     /* Rare case 
161c0 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67  of a really larg
161d0 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20  e header */.    
161e0 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
161f0 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
16200 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56  ;.    nHdr += nV
16210 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e  arint;.    if( n
16220 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61  Varint<sqlite3Va
16230 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20  rintLen(nHdr) ) 
16240 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42  nHdr++;.  }.  nB
16250 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61  yte = nHdr+nData
16260 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a  ;.  if( nByte+nZ
16270 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  ero>db->aLimit[S
16280 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
16290 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
162a0 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
162b0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
162c0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
162d0 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61   has a buffer la
162e0 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74  rge enough to st
162f0 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65  ore .  ** the ne
16300 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75  w record. The ou
16310 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70  tput register (p
16320 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61  Op->p3) is not a
16330 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62  llowed to.  ** b
16340 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70  e one of the inp
16350 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65  ut registers (be
16360 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77  cause the follow
16370 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  ing call to.  **
16380 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
16390 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20  learAndResize() 
163a0 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68  could clobber th
163b0 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69  e value before i
163c0 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f  t is used)..  */
163d0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
163e0 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73  beMemClearAndRes
163f0 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  ize(pOut, (int)n
16400 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74  Byte) ){.    got
16410 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
16420 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38  zNewRecord = (u8
16430 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f   *)pOut->z;..  /
16440 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f  * Write the reco
16450 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56  rd */.  i = putV
16460 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f  arint32(zNewReco
16470 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d  rd, nHdr);.  j =
16480 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28   nHdr;.  assert(
16490 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29   pData0<=pLast )
164a0 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74 61  ;.  pRec = pData
164b0 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72  0;.  do{.    ser
164c0 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d  ial_type = pRec-
164d0 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45  >uTemp;.    /* E
164e0 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36  VIDENCE-OF: R-06
164f0 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77  529-47362 Follow
16500 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
16510 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d  int are one or m
16520 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74  ore.    ** addit
16530 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f  ional varints, o
16540 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a  ne per column. *
16550 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  /.    i += putVa
16560 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
16570 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
16580 70 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  pe);            
16590 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a  /* serial type *
165a0 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43  /.    /* EVIDENC
165b0 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31  E-OF: R-64536-51
165c0 37 32 38 20 54 68 65 20 76 61 6c 75 65 73 20 66  728 The values f
165d0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
165e0 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20  n the record.   
165f0 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   ** immediately 
16600 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65  follow the heade
16610 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73  r. */.    j += s
16620 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
16630 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
16640 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c  j], pRec, serial
16650 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65  _type); /* conte
16660 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20  nt */.  }while( 
16670 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20  (++pRec)<=pLast 
16680 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  );.  assert( i==
16690 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nHdr );.  assert
166a0 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20  ( j==nByte );.. 
166b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
166c0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
166d0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
166e0 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  or) );.  pOut->n
166f0 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
16700 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
16710 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e  EM_Blob;.  if( n
16720 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74  Zero ){.    pOut
16730 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72  ->u.nZero = nZer
16740 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
16750 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
16760 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
16770 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
16780 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
16790 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76  lob is ever conv
167a0 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f  erted to text */
167b0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
167c0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
167d0 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
167e0 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
167f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
16800 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50  code: Count P1 P
16810 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
16820 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74  sis: r[P2]=count
16830 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  ().**.** Store t
16840 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  he number of ent
16850 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72  ries (an integer
16860 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74   value) in the t
16870 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a  able or index .*
16880 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  * opened by curs
16890 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65  or P1 in registe
168a0 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  r P2.*/.#ifndef 
168b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
168c0 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43  ECOUNT.case OP_C
168d0 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
168e0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34  /* out2 */.  i64
168f0 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72   nEntry;.  BtCur
16900 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70  sor *pCrsr;..  p
16910 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  Crsr = p->apCsr[
16920 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f  pOp->p1]->pCurso
16930 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
16940 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d  sr );.  nEntry =
16950 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
16960 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74  ed.  Only used t
16970 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
16980 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ing. */.  rc = s
16990 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74  qlite3BtreeCount
169a0 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29  (pCrsr, &nEntry)
169b0 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
169c0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
169d0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
169e0 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b   nEntry;.  break
169f0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
16a00 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74  pcode: Savepoint
16a10 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
16a20 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65  ** Open, release
16a30 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65   or rollback the
16a40 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64   savepoint named
16a50 20 62 79 20 70 61 72 61 6d 65 74 65 72 20 50 34   by parameter P4
16a60 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f  , depending.** o
16a70 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  n the value of P
16a80 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77  1. To open a new
16a90 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d   savepoint, P1==
16aa0 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20 28 63  0. To release (c
16ab0 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69  ommit) an.** exi
16ac0 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c  sting savepoint,
16ad0 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f   P1==1, or to ro
16ae0 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74 69  llback an existi
16af0 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50 31 3d  ng savepoint P1=
16b00 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  =2..*/.case OP_S
16b10 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  avepoint: {.  in
16b20 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 20  t p1;           
16b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16b40 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f 70 65   Value of P1 ope
16b50 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rand */.  char *
16b60 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
16b70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
16b80 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a  e of savepoint *
16b90 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20  /.  int nName;. 
16ba0 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77   Savepoint *pNew
16bb0 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
16bc0 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76  Savepoint;.  Sav
16bd0 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20  epoint *pTmp;.  
16be0 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a  int iSavepoint;.
16bf0 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20    int ii;..  p1 
16c00 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61  = pOp->p1;.  zNa
16c10 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  me = pOp->p4.z;.
16c20 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61  .  /* Assert tha
16c30 74 20 74 68 65 20 70 31 20 70 61 72 61 6d 65 74  t the p1 paramet
16c40 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73  er is valid. Als
16c50 6f 20 74 68 61 74 20 69 66 20 74 68 65 72 65 20  o that if there 
16c60 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20  is no open.  ** 
16c70 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
16c80 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62  n there cannot b
16c90 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73  e any savepoints
16ca0 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  . .  */.  assert
16cb0 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
16cc0 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43  ==0 || db->autoC
16cd0 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73  ommit==0 );.  as
16ce0 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f  sert( p1==SAVEPO
16cf0 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53  INT_BEGIN||p1==S
16d00 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
16d10 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
16d20 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73  ROLLBACK );.  as
16d30 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
16d40 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72  oint || db->isTr
16d50 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
16d60 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  nt==0 );.  asser
16d70 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  t( checkSavepoin
16d80 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20 20  tCount(db) );.  
16d90 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
16da0 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 70  ader );..  if( p
16db0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
16dc0 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62  IN ){.    if( db
16dd0 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29  ->nVdbeWrite>0 )
16de0 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77  {.      /* A new
16df0 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f   savepoint canno
16e00 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66 20  t be created if 
16e10 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65  there are active
16e20 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a   write .      **
16e30 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65   statements (i.e
16e40 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74  . open read/writ
16e50 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c  e incremental bl
16e60 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20  ob handles)..   
16e70 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
16e80 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
16e90 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76  "cannot open sav
16ea0 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61  epoint - SQL sta
16eb0 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
16ec0 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20  ess");.      rc 
16ed0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
16ee0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
16ef0 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53  nName = sqlite3S
16f00 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a  trlen30(zName);.
16f10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
16f20 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
16f30 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20  E.      /* This 
16f40 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20  call is Ok even 
16f50 69 66 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e  if this savepoin
16f60 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20  t is actually a 
16f70 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20  transaction.    
16f80 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28    ** savepoint (
16f90 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73 68  and therefore sh
16fa0 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20  ould not prompt 
16fb0 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61  xSavepoint()) ca
16fc0 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a  llbacks..      *
16fd0 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 20 74  * If this is a t
16fe0 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
16ff0 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65  oint being opene
17000 64 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e 74  d, it is guarant
17010 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61  eed.      ** tha
17020 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e  t the db->aVTran
17030 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70  s[] array is emp
17040 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73  ty.  */.      as
17050 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f  sert( db->autoCo
17060 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e  mmit==0 || db->n
17070 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20  VTrans==0 );.   
17080 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
17090 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
170a0 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
170b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
170c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170d0 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74    db->nStatement
170e0 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29  +db->nSavepoint)
170f0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
17100 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
17110 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
17120 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ror;.#endif..   
17130 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e     /* Create a n
17140 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72  ew savepoint str
17150 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20  ucture. */.     
17160 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44   pNew = sqlite3D
17170 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
17180 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29  izeof(Savepoint)
17190 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20  +nName+1);.     
171a0 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20   if( pNew ){.   
171b0 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65       pNew->zName
171c0 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77   = (char *)&pNew
171d0 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  [1];.        mem
171e0 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c  cpy(pNew->zName,
171f0 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29   zName, nName+1)
17200 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f  ;.    .        /
17210 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
17220 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
17230 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69  n, then mark thi
17240 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20  s as a special. 
17250 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73         ** "trans
17260 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
17270 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ". */.        if
17280 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
17290 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
172a0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
172b0 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
172c0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
172d0 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20  epoint = 1;.    
172e0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
172f0 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
17300 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  int++;.        }
17310 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a  .    .        /*
17320 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61   Link the new sa
17330 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65  vepoint into the
17340 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
17350 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20  's list. */.    
17360 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20      pNew->pNext 
17370 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
17380 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
17390 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b  avepoint = pNew;
173a0 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e  .        pNew->n
173b0 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64  DeferredCons = d
173c0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
173d0 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
173e0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
173f0 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
17400 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  ImmCons;.      }
17410 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
17420 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
17430 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64   0;..    /* Find
17440 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70   the named savep
17450 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69  oint. If there i
17460 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f  s no such savepo
17470 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20  int, then an.   
17480 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20   ** an error is 
17490 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
174a0 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f  user.  */.    fo
174b0 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  r(.      pSavepo
174c0 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  int = db->pSavep
174d0 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61  oint; .      pSa
174e0 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74  vepoint && sqlit
174f0 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65 70  e3StrICmp(pSavep
17500 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  oint->zName, zNa
17510 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65  me);.      pSave
17520 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
17530 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b  nt->pNext.    ){
17540 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e  .      iSavepoin
17550 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  t++;.    }.    i
17560 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29  f( !pSavepoint )
17570 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
17580 64 62 65 45 72 72 6f 72 28 70 2c 20 22 6e 6f 20  dbeError(p, "no 
17590 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20  such savepoint: 
175a0 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
175b0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
175c0 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20  RROR;.    }else 
175d0 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
175e0 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45  te>0 && p1==SAVE
175f0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
17600 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20  .      /* It is 
17610 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
17620 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
17630 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20   a savepoint if 
17640 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20  there are .     
17650 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65   ** active write
17660 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20   statements..   
17670 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
17680 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
17690 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20  "cannot release 
176a0 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20  savepoint - ".  
176b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176c0 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
176d0 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
176e0 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20  ess");.      rc 
176f0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17700 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20     }else{..     
17710 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68   /* Determine wh
17720 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69  ether or not thi
17730 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
17740 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  on savepoint. If
17750 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e   so,.      ** an
17760 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  d this is a RELE
17770 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  ASE command, the
17780 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  n the current tr
17790 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20  ansaction .     
177a0 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64   ** is committed
177b0 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
177c0 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74    int isTransact
177d0 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ion = pSavepoint
177e0 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62  ->pNext==0 && db
177f0 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
17800 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
17810 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
17820 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
17830 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
17840 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20        if( (rc = 
17850 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
17860 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
17870 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
17880 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
17890 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
178a0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
178b0 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
178c0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
178d0 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
178e0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
178f0 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29     p->pc = (int)
17900 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
17910 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
17920 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
17930 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
17940 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17950 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
17960 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
17970 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
17980 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
17990 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20  vepoint = 0;.   
179a0 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b       rc = p->rc;
179b0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
179c0 20 20 20 20 20 20 69 6e 74 20 69 73 53 63 68 65        int isSche
179d0 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20  maChange;.      
179e0 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    iSavepoint = d
179f0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20  b->nSavepoint - 
17a00 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a  iSavepoint - 1;.
17a10 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
17a20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
17a30 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  CK ){.          
17a40 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d  isSchemaChange =
17a50 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
17a60 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
17a70 65 73 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20  es)!=0;.        
17a80 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
17a90 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
17aa0 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
17ab0 73 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70  sqlite3BtreeTrip
17ac0 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61  AllCursors(db->a
17ad0 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20  Db[ii].pBt,.    
17ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b00 20 20 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f     SQLITE_ABORT_
17b10 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20  ROLLBACK,.      
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b40 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d   isSchemaChange=
17b50 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  =0);.           
17b60 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
17b70 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
17b80 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
17b90 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17ba0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
17bb0 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
17bc0 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  e = 0;.        }
17bd0 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d  .        for(ii=
17be0 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
17bf0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
17c00 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
17c10 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61  eSavepoint(db->a
17c20 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20  Db[ii].pBt, p1, 
17c30 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
17c40 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
17c50 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
17c60 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
17c70 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17c80 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
17c90 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
17ca0 66 28 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67  f( isSchemaChang
17cb0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  e ){.          s
17cc0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
17cd0 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
17ce0 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  b);.          sq
17cf0 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
17d00 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
17d10 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
17d20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d  db->flags = (db-
17d30 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f  >flags | SQLITE_
17d40 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a  InternChanges);.
17d50 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17d60 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65  }.  .      /* Re
17d70 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
17d80 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45  her this is a RE
17d90 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43  LEASE or ROLLBAC
17da0 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a  K, destroy all .
17db0 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
17dc0 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64  nts nested insid
17dd0 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69  e of the savepoi
17de0 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
17df0 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77  d on. */.      w
17e00 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70  hile( db->pSavep
17e10 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74  oint!=pSavepoint
17e20 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70   ){.        pTmp
17e30 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
17e40 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
17e50 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70  Savepoint = pTmp
17e60 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
17e70 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
17e80 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20  b, pTmp);.      
17e90 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
17ea0 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
17eb0 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61     /* If it is a
17ec0 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64   RELEASE, then d
17ed0 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70  estroy the savep
17ee0 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
17ef0 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  ted on .      **
17f00 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61   too. If it is a
17f10 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68   ROLLBACK TO, th
17f20 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65  en set the numbe
17f30 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20  r of deferred . 
17f40 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69       ** constrai
17f50 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72  nt violations pr
17f60 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
17f70 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c  abase to the val
17f80 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20  ue stored.      
17f90 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65  ** when the save
17fa0 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65  point was create
17fb0 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  d.  */.      if(
17fc0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
17fd0 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
17fe0 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70    assert( pSavep
17ff0 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70  oint==db->pSavep
18000 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20  oint );.        
18010 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
18020 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
18030 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
18040 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53  te3DbFree(db, pS
18050 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
18060 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
18070 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
18080 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
18090 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t--;.        }. 
180a0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
180b0 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
180c0 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69  dCons = pSavepoi
180d0 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  nt->nDeferredCon
180e0 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  s;.        db->n
180f0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
18100 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
18110 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
18120 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69        }..      i
18130 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
18140 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49  n || p1==SAVEPOI
18150 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20  NT_ROLLBACK ){. 
18160 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
18170 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
18180 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  (db, p1, iSavepo
18190 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
181a0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
181b0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
181c0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
181d0 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20   }.    }.  }..  
181e0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
181f0 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20  ode: AutoCommit 
18200 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
18210 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61  * Set the databa
18220 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  se auto-commit f
18230 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20  lag to P1 (1 or 
18240 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75  0). If P2 is tru
18250 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20  e, roll.** back 
18260 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63  any currently ac
18270 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73  tive btree trans
18280 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72  actions. If ther
18290 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65  e are any active
182a0 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66  .** VMs (apart f
182b0 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74  rom this one), t
182c0 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66  hen a ROLLBACK f
182d0 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20  ails.  A COMMIT 
182e0 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72  fails if.** ther
182f0 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
18300 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69  ting VMs or acti
18310 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20  ve VMs that use 
18320 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a  shared cache..**
18330 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
18340 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20  tion causes the 
18350 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63  VM to halt..*/.c
18360 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69  ase OP_AutoCommi
18370 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72  t: {.  int desir
18380 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
18390 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20  int iRollback;. 
183a0 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a   int turnOnAC;..
183b0 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d    desiredAutoCom
183c0 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  mit = pOp->p1;. 
183d0 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70   iRollback = pOp
183e0 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43  ->p2;.  turnOnAC
183f0 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f   = desiredAutoCo
18400 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74  mmit && !db->aut
18410 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72  oCommit;.  asser
18420 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
18430 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72  mmit==1 || desir
18440 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
18450 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
18460 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
18470 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d  1 || iRollback==
18480 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
18490 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30  b->nVdbeActive>0
184a0 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74   );  /* At least
184b0 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20   this one VM is 
184c0 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65  active */.  asse
184d0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
184e0 20 29 3b 0a 0a 20 20 69 66 28 20 74 75 72 6e 4f   );..  if( turnO
184f0 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63  nAC && !iRollbac
18500 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 57 72  k && db->nVdbeWr
18510 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20  ite>0 ){.    /* 
18520 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
18530 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ion implements a
18540 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65   COMMIT and othe
18550 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e  r VMs are writin
18560 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20  g.    ** return 
18570 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
18580 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74 68  ing that the oth
18590 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70  er VMs must comp
185a0 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20  lete first. .   
185b0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
185c0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
185d0 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
185e0 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
185f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18600 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
18610 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
18620 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
18630 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20  E_BUSY;.  }else 
18640 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
18650 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43  ommit!=db->autoC
18660 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28  ommit ){.    if(
18670 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20   iRollback ){.  
18680 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69      assert( desi
18690 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
186a0 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
186b0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c  3RollbackAll(db,
186c0 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
186d0 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64  LLBACK);.      d
186e0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
186f0 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
18700 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
18710 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
18720 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
18730 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
18740 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65  eturn;.    }else
18750 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  {.      db->auto
18760 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73  Commit = (u8)des
18770 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
18780 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
18790 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
187a0 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
187b0 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
187c0 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
187d0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
187e0 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64  ommit = (u8)(1-d
187f0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
18800 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63  );.        p->rc
18810 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
18820 55 53 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  USY;.        got
18830 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
18840 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
18850 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
18860 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20  atement==0 );.  
18870 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61    sqlite3CloseSa
18880 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20  vepoints(db);.  
18890 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
188a0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
188b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  rc = SQLITE_DONE
188c0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
188d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
188e0 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20  RROR;.    }.    
188f0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
18900 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
18910 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
18920 70 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73  p,.        (!des
18930 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f  iredAutoCommit)?
18940 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20  "cannot start a 
18950 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68  transaction with
18960 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
18970 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f  ":(.        (iRo
18980 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20  llback)?"cannot 
18990 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72  rollback - no tr
189a0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
189b0 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20  ive":.          
189c0 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
189d0 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61   commit - no tra
189e0 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
189f0 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20  ve"));.         
18a00 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
18a10 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72  _ERROR;.  }.  br
18a20 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
18a30 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50  e: Transaction P
18a40 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
18a50 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e  .** Begin a tran
18a60 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62  saction on datab
18a70 61 73 65 20 50 31 20 69 66 20 61 20 74 72 61 6e  ase P1 if a tran
18a80 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61  saction is not a
18a90 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76 65  lready.** active
18aa0 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  ..** If P2 is no
18ab0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77  n-zero, then a w
18ac0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
18ad0 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72 20   is started, or 
18ae0 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72  if a .** read-tr
18af0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c 72  ansaction is alr
18b00 65 61 64 79 20 61 63 74 69 76 65 2c 20 69 74 20  eady active, it 
18b10 69 73 20 75 70 67 72 61 64 65 64 20 74 6f 20 61  is upgraded to a
18b20 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
18b30 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  on..** If P2 is 
18b40 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61  zero, then a rea
18b50 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  d-transaction is
18b60 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20   started..**.** 
18b70 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
18b80 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
18b90 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68  file on which th
18ba0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
18bb0 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e  .** started.  In
18bc0 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69  dex 0 is the mai
18bd0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
18be0 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74  and index 1 is t
18bf0 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20  he.** file used 
18c00 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61  for temporary ta
18c10 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f  bles.  Indices o
18c20 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20  f 2 or more are 
18c30 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61  used for.** atta
18c40 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
18c50 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65  **.** If a write
18c60 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
18c70 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20  started and the 
18c80 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75  Vdbe.usesStmtJou
18c90 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20  rnal flag is.** 
18ca0 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20  true (this flag 
18cb0 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64  is set if the Vd
18cc0 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f  be may modify mo
18cd0 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20  re than one row 
18ce0 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77  and may.** throw
18cf0 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
18d00 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e  ion), a statemen
18d10 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
18d20 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64  y also be opened
18d30 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66  ..** More specif
18d40 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d  ically, a statem
18d50 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
18d60 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68  is opened iff th
18d70 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
18d80 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72  nnection is curr
18d90 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74  ently not in aut
18da0 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72  ocommit mode, or
18db0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74   if there are ot
18dc0 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74  her.** active st
18dd0 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74  atements. A stat
18de0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
18df0 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61  n allows the cha
18e00 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74 68 69  nges made by thi
18e10 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20  s.** VDBE to be 
18e20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65  rolled back afte
18e30 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f  r an error witho
18e40 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c  ut having to rol
18e50 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e  l back the.** en
18e60 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tire transaction
18e70 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73  . If no error is
18e80 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68   encountered, th
18e90 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
18ea0 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20  saction.** will 
18eb0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f  automatically co
18ec0 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44  mmit when the VD
18ed0 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20  BE halts..**.** 
18ee0 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74 68  If P5!=0 then th
18ef0 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63  is opcode also c
18f00 68 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d 61  hecks the schema
18f10 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74 20   cookie against 
18f20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 63  P3.** and the sc
18f30 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20  hema generation 
18f40 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74 20  counter against 
18f50 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69  P4..** The cooki
18f60 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61  e changes its va
18f70 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  lue whenever the
18f80 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
18f90 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69   changes..** Thi
18fa0 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  s operation is u
18fb0 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68  sed to detect wh
18fc0 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b  en that the cook
18fd0 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ie has changed.*
18fe0 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63  * and that the c
18ff0 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e  urrent process n
19000 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74  eeds to reread t
19010 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20 74  he schema.  If t
19020 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f  he schema.** coo
19030 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66 65 72  kie in P3 differ
19040 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65 6d  s from the schem
19050 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20  a cookie in the 
19060 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20  database header 
19070 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63 68  or.** if the sch
19080 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  ema generation c
19090 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69 66  ounter in P4 dif
190a0 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63 75  fers from the cu
190b0 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74  rrent.** generat
190c0 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68 65  ion counter, the
190d0 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45  n an SQLITE_SCHE
190e0 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61 69 73  MA error is rais
190f0 65 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f 6e  ed and execution
19100 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65 20  .** halts.  The 
19110 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77  sqlite3_step() w
19120 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e 20  rapper function 
19130 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70 72 65  might then repre
19140 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61 74  pare the.** stat
19150 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e 20  ement and rerun 
19160 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  it from the begi
19170 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nning..*/.case O
19180 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b  P_Transaction: {
19190 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20  .  Btree *pBt;. 
191a0 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
191b0 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72  t iGen;..  asser
191c0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
191d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
191e0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70  readOnly==0 || p
191f0 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61  Op->p2==0 );.  a
19200 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
19210 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
19220 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
19230 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
19240 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
19250 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  p1) );.  if( pOp
19260 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61  ->p2 && (db->fla
19270 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72  gs & SQLITE_Quer
19280 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20  yOnly)!=0 ){.   
19290 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41   rc = SQLITE_REA
192a0 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20  DONLY;.    goto 
192b0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
192c0 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20  or;.  }.  pBt = 
192d0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
192e0 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74  .pBt;..  if( pBt
192f0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
19300 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
19310 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32  ans(pBt, pOp->p2
19320 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
19330 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
19340 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74      p->pc = (int
19350 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
19360 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
19370 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
19380 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
19390 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
193a0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
193b0 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
193c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
193d0 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  or;.    }..    i
193e0 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d  f( pOp->p2 && p-
193f0 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  >usesStmtJournal
19400 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61   .     && (db->a
19410 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
19420 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29  db->nVdbeRead>1)
19430 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61   .    ){.      a
19440 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
19450 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
19460 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ) );.      if( p
19470 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
19480 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
19490 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
194a0 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76  t>=0 && db->nSav
194b0 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20  epoint>=0 );.   
194c0 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
194d0 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20  ent++; .        
194e0 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20  p->iStatement = 
194f0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
19500 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b   db->nStatement;
19510 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
19520 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
19530 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41  Savepoint(db, SA
19540 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70  VEPOINT_BEGIN, p
19550 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b  ->iStatement-1);
19560 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
19570 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
19580 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19590 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70  BtreeBeginStmt(p
195a0 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  Bt, p->iStatemen
195b0 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  t);.      }..   
195c0 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20     /* Store the 
195d0 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66  current value of
195e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
195f0 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63  ndles deferred c
19600 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20  onstraint.      
19610 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74  ** counter. If t
19620 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
19630 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
19640 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
19650 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76  ,.      ** the v
19660 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75  alue of this cou
19670 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65  nter needs to be
19680 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20   restored too.  
19690 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d  */.      p->nStm
196a0 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  tDefCons = db->n
196b0 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
196c0 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49      p->nStmtDefI
196d0 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  mmCons = db->nDe
196e0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
196f0 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74     }..    /* Gat
19700 68 65 72 20 74 68 65 20 73 63 68 65 6d 61 20 76  her the schema v
19710 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
19720 72 20 63 68 65 63 6b 69 6e 67 3a 0a 20 20 20 20  r checking:.    
19730 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  ** IMPLEMENTATIO
19740 4e 2d 4f 46 3a 20 52 2d 33 32 31 39 35 2d 31 39  N-OF: R-32195-19
19750 34 36 35 20 54 68 65 20 73 63 68 65 6d 61 20 76  465 The schema v
19760 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62  ersion is used b
19770 79 20 53 51 4c 69 74 65 0a 20 20 20 20 2a 2a 20  y SQLite.    ** 
19780 65 61 63 68 20 74 69 6d 65 20 61 20 71 75 65 72  each time a quer
19790 79 20 69 73 20 65 78 65 63 75 74 65 64 20 74 6f  y is executed to
197a0 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65   ensure that the
197b0 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 20   internal cache 
197c0 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 73 63  of the.    ** sc
197d0 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20 63  hema used when c
197e0 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51 4c  ompiling the SQL
197f0 20 71 75 65 72 79 20 6d 61 74 63 68 65 73 20 74   query matches t
19800 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65  he schema of the
19810 0a 20 20 20 20 2a 2a 20 64 61 74 61 62 61 73 65  .    ** database
19820 20 61 67 61 69 6e 73 74 20 77 68 69 63 68 20 74   against which t
19830 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72  he compiled quer
19840 79 20 69 73 20 61 63 74 75 61 6c 6c 79 20 65 78  y is actually ex
19850 65 63 75 74 65 64 2e 0a 20 20 20 20 2a 2f 0a 20  ecuted..    */. 
19860 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47     sqlite3BtreeG
19870 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45  etMeta(pBt, BTRE
19880 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
19890 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
198a0 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d  ;.    iGen = db-
198b0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
198c0 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69  chema->iGenerati
198d0 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  on;.  }else{.   
198e0 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20   iGen = iMeta = 
198f0 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  0;.  }.  assert(
19900 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
19910 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
19920 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f  NT32 );.  if( pO
19930 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21  p->p5 && (iMeta!
19940 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e  =pOp->p3 || iGen
19950 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a  !=pOp->p4.i) ){.
19960 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
19970 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
19980 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
19990 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72  g = sqlite3DbStr
199a0 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73  Dup(db, "databas
199b0 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  e schema has cha
199c0 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49  nged");.    /* I
199d0 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f  f the schema-coo
199e0 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74  kie from the dat
199f0 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68  abase file match
19a00 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20  es the cookie . 
19a10 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74     ** stored wit
19a20 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  h the in-memory 
19a30 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
19a40 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f  f the schema, do
19a50 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f  .    ** not relo
19a60 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72  ad the schema fr
19a70 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
19a80 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  file..    **.   
19a90 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74   ** If virtual-t
19aa0 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65  ables are in use
19ab0 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75  , this is not ju
19ac0 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  st an optimizati
19ad0 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e  on..    ** Often
19ae0 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65  , v-tables store
19af0 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f   their data in o
19b00 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c  ther SQLite tabl
19b10 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a  es, which.    **
19b20 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f   are queried fro
19b30 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29  m within xNext()
19b40 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62   and other v-tab
19b50 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67  le methods using
19b60 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64  .    ** prepared
19b70 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63   queries. If suc
19b80 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74  h a query is out
19b90 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20  -of-date, we do 
19ba0 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20  not want to.    
19bb0 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64  ** discard the d
19bc0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
19bd0 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65  as the user code
19be0 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68   implementing th
19bf0 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65  e.    ** v-table
19c00 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62   would have to b
19c10 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20  e ready for the 
19c20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
19c30 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20  ucture itself.  
19c40 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c    ** to be inval
19c50 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20  idated whenever 
19c60 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69  sqlite3_step() i
19c70 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  s called from wi
19c80 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76  thin .    ** a v
19c90 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20  -table method.. 
19ca0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62     */.    if( db
19cb0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
19cc0 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
19cd0 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a  ookie!=iMeta ){.
19ce0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
19cf0 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20  etOneSchema(db, 
19d00 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a  pOp->p1);.    }.
19d10 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
19d20 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   1;.    rc = SQL
19d30 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a  ITE_SCHEMA;.  }.
19d40 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19d50 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69  pcode: ReadCooki
19d60 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
19d70 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65  *.** Read cookie
19d80 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20   number P3 from 
19d90 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
19da0 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65  write it into re
19db0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33  gister P2..** P3
19dc0 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==1 is the schem
19dd0 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d  a version.  P3==
19de0 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
19df0 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d  e format..** P3=
19e00 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
19e10 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
19e20 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  e size, and so f
19e30 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a  orth.  P1==0 is.
19e40 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
19e50 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
19e60 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62  ==1 is the datab
19e70 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
19e80 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72   store.** tempor
19e90 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
19ea0 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20  * There must be 
19eb0 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74  a read-lock on t
19ec0 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74  he database (eit
19ed0 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
19ee0 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61  n.** must be sta
19ef0 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75  rted or there mu
19f00 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75  st be an open cu
19f10 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20  rsor) before.** 
19f20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69  executing this i
19f30 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
19f40 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69  ase OP_ReadCooki
19f50 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
19f60 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
19f70 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
19f80 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f   iDb;.  int iCoo
19f90 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  kie;..  assert( 
19fa0 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
19fb0 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
19fc0 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70  .  iCookie = pOp
19fd0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
19fe0 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e  pOp->p3<SQLITE_N
19ff0 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
1a000 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
1a010 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
1a020 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
1a030 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20  aDb[iDb].pBt!=0 
1a040 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1a050 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1a060 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20  Mask, iDb) );.. 
1a070 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
1a080 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62  Meta(db->aDb[iDb
1a090 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20  ].pBt, iCookie, 
1a0a0 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
1a0b0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
1a0c0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
1a0d0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
1a0e0 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Meta;.  break;.}
1a0f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74  ../* Opcode: Set
1a100 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
1a110 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
1a120 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
1a130 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74 65  egister P3 (inte
1a140 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e  rpreted as an in
1a150 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63  teger).** into c
1a160 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20  ookie number P2 
1a170 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  of database P1. 
1a180 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P2==1 is the sc
1a190 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a  hema version.  .
1a1a0 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20  ** P2==2 is the 
1a1b0 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
1a1c0 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P2==3 is the re
1a1d0 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
1a1e0 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20  cache .** size, 
1a1f0 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
1a200 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e  1==0 is the main
1a210 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
1a220 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
1a230 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
1a240 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
1a250 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1a260 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61  ..**.** A transa
1a270 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74  ction must be st
1a280 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65  arted before exe
1a290 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  cuting this opco
1a2a0 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  de..*/.case OP_S
1a2b0 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  etCookie: {     
1a2c0 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62    /* in3 */.  Db
1a2d0 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28   *pDb;.  assert(
1a2e0 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f   pOp->p2<SQLITE_
1a2f0 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
1a300 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1a310 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1a320 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1a330 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1a340 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
1a350 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
1a360 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
1a370 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
1a380 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
1a390 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
1a3a0 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  pBt!=0 );.  asse
1a3b0 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
1a3c0 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70  aMutexHeld(db, p
1a3d0 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20  Op->p1, 0) );.  
1a3e0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
1a3f0 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p3];.  sqlite3
1a400 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1a410 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65  y(pIn3);.  /* Se
1a420 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64  e note about ind
1a430 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f  ex shifting on O
1a440 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a  P_ReadCookie */.
1a450 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1a460 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44  reeUpdateMeta(pD
1a470 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c  b->pBt, pOp->p2,
1a480 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29   (int)pIn3->u.i)
1a490 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  ;.  if( pOp->p2=
1a4a0 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45  =BTREE_SCHEMA_VE
1a4b0 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20  RSION ){.    /* 
1a4c0 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  When the schema 
1a4d0 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20  cookie changes, 
1a4e0 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63  record the new c
1a4f0 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79  ookie internally
1a500 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
1a510 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
1a520 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d  kie = (int)pIn3-
1a530 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c  >u.i;.    db->fl
1a540 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e  ags |= SQLITE_In
1a550 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d  ternChanges;.  }
1a560 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32  else if( pOp->p2
1a570 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52  ==BTREE_FILE_FOR
1a580 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65  MAT ){.    /* Re
1a590 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20  cord changes in 
1a5a0 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  the file format 
1a5b0 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
1a5c0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1a5d0 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69   = (u8)pIn3->u.i
1a5e0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1a5f0 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a  >p1==1 ){.    /*
1a600 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
1a610 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
1a620 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65  nts whenever the
1a630 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20   TEMP database. 
1a640 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20     ** schema is 
1a650 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74  changed.  Ticket
1a660 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71   #1644 */.    sq
1a670 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
1a680 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
1a690 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
1a6a0 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 0;.  }.  bre
1a6b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1a6c0 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32  : OpenRead P1 P2
1a6d0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
1a6e0 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69  opsis: root=P2 i
1a6f0 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  Db=P3.**.** Open
1a700 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72   a read-only cur
1a710 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61  sor for the data
1a720 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65  base table whose
1a730 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a   root page is.**
1a740 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73   P2 in a databas
1a750 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74  e file.  The dat
1a760 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65  abase file is de
1a770 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20  termined by P3. 
1a780 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20  .** P3==0 means 
1a790 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1a7a0 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74  e, P3==1 means t
1a7b0 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
1a7c0 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61   for .** tempora
1a7d0 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50  ry tables, and P
1a7e0 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74  3>1 means used t
1a7f0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
1a800 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74   attached.** dat
1a810 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65  abase.  Give the
1a820 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69   new cursor an i
1a830 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e  dentifier of P1.
1a840 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75    The P1.** valu
1a850 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63  es need not be c
1a860 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c  ontiguous but al
1a870 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75  l P1 values shou
1a880 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65  ld be small inte
1a890 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61  gers..** It is a
1a8a0 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74  n error for P1 t
1a8b0 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a  o be negative..*
1a8c0 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
1a8d0 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  en use the conte
1a8e0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
1a8f0 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61  2 as the root pa
1a900 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76  ge, not.** the v
1a910 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c  alue of P2 itsel
1a920 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77  f..**.** There w
1a930 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f  ill be a read lo
1a940 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
1a950 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72  se whenever ther
1a960 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20  e is an.** open 
1a970 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20  cursor.  If the 
1a980 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c  database was unl
1a990 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74  ocked prior to t
1a9a0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  his instruction.
1a9b0 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c  ** then a read l
1a9c0 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20  ock is acquired 
1a9d0 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20  as part of this 
1a9e0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20  instruction.  A 
1a9f0 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c  read.** lock all
1aa00 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73  ows other proces
1aa10 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20  ses to read the 
1aa20 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f  database but pro
1aa30 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74  hibits.** any ot
1aa40 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d  her process from
1aa50 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64   modifying the d
1aa60 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65  atabase.  The re
1aa70 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65  ad lock is.** re
1aa80 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20  leased when all 
1aa90 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73  cursors are clos
1aaa0 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73  ed.  If this ins
1aab0 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74  truction attempt
1aac0 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65  s.** to get a re
1aad0 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c  ad lock but fail
1aae0 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65  s, the script te
1aaf0 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e  rminates with an
1ab00 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
1ab10 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  error code..**.*
1ab20 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
1ab30 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
1ab40 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
1ab50 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
1ab60 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
1ab70 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
1ab80 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
1ab90 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1aba0 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
1abb0 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
1abc0 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
1abd0 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
1abe0 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
1abf0 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
1ac00 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
1ac10 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
1ac20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
1ac30 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
1ac40 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
1ac50 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1ac60 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a  s in the table..
1ac70 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1ac80 4f 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70 65  OpenWrite, Reope
1ac90 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  nIdx.*/./* Opcod
1aca0 65 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31 20  e: ReopenIdx P1 
1acb0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
1acc0 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32  ynopsis: root=P2
1acd0 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68   iDb=P3.**.** Th
1ace0 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f  e ReopenIdx opco
1acf0 64 65 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79  de works exactly
1ad00 20 6c 69 6b 65 20 52 65 61 64 4f 70 65 6e 20 65   like ReadOpen e
1ad10 78 63 65 70 74 20 74 68 61 74 20 69 74 20 66 69  xcept that it fi
1ad20 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f  rst.** checks to
1ad30 20 73 65 65 20 69 66 20 74 68 65 20 63 75 72 73   see if the curs
1ad40 6f 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72 65  or on P1 is alre
1ad50 61 64 79 20 6f 70 65 6e 20 77 69 74 68 20 61 20  ady open with a 
1ad60 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6e 75 6d  root page.** num
1ad70 62 65 72 20 6f 66 20 50 32 20 61 6e 64 20 69 66  ber of P2 and if
1ad80 20 69 74 20 69 73 20 74 68 69 73 20 6f 70 63 6f   it is this opco
1ad90 64 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d  de becomes a no-
1ada0 6f 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  op.  In other wo
1adb0 72 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63  rds,.** if the c
1adc0 75 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79  ursor is already
1add0 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65   open, do not re
1ade0 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  open it..**.** T
1adf0 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63  he ReopenIdx opc
1ae00 6f 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20  ode may only be 
1ae10 75 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30 20  used with P5==0 
1ae20 61 6e 64 20 77 69 74 68 20 50 34 20 62 65 69 6e  and with P4 bein
1ae30 67 0a 2a 2a 20 61 20 50 34 5f 4b 45 59 49 4e 46  g.** a P4_KEYINF
1ae40 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74 68  O object.  Furth
1ae50 65 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20 76  ermore, the P3 v
1ae60 61 6c 75 65 20 6d 75 73 74 20 62 65 20 74 68 65  alue must be the
1ae70 20 73 61 6d 65 20 61 73 0a 2a 2a 20 65 76 65 72   same as.** ever
1ae80 79 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49 64  y other ReopenId
1ae90 78 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66 6f  x or OpenRead fo
1aea0 72 20 74 68 65 20 73 61 6d 65 20 63 75 72 73 6f  r the same curso
1aeb0 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20  r number..**.** 
1aec0 53 65 65 20 74 68 65 20 4f 70 65 6e 52 65 61 64  See the OpenRead
1aed0 20 6f 70 63 6f 64 65 20 64 6f 63 75 6d 65 6e 74   opcode document
1aee0 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69  ation for additi
1aef0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
1af00 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
1af10 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20  OpenWrite P1 P2 
1af20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
1af30 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
1af40 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  b=P3.**.** Open 
1af50 61 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72  a read/write cur
1af60 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20  sor named P1 on 
1af70 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1af80 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a  ex whose root.**
1af90 20 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72   page is P2.  Or
1afa0 20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74 68   if P5!=0 use th
1afb0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
1afc0 69 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64  ister P2 to find
1afd0 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67   the.** root pag
1afe0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  e..**.** The P4 
1aff0 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74  value may be eit
1b000 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28  her an integer (
1b010 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70  P4_INT32) or a p
1b020 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b  ointer to.** a K
1b030 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
1b040 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49   (P4_KEYINFO). I
1b050 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65  f it is a pointe
1b060 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a  r to a KeyInfo .
1b070 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68  ** structure, th
1b080 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72  en said structur
1b090 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f  e defines the co
1b0a0 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74  ntent and collat
1b0b0 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ing .** sequence
1b0c0 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65   of the index be
1b0d0 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65  ing opened. Othe
1b0e0 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20  rwise, if P4 is 
1b0f0 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76  an integer .** v
1b100 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20  alue, it is set 
1b110 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
1b120 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1b130 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65  table, or to the
1b140 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65  .** largest inde
1b150 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20  x of any column 
1b160 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
1b170 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73  t is actually us
1b180 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ed..**.** This i
1b190 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73  nstruction works
1b1a0 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52   just like OpenR
1b1b0 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20  ead except that 
1b1c0 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72  it opens the cur
1b1d0 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77  sor.** in read/w
1b1e0 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20  rite mode.  For 
1b1f0 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74  a given table, t
1b200 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20  here can be one 
1b210 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c  or more read-onl
1b220 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20  y.** cursors or 
1b230 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72  a single read/wr
1b240 69 74 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e  ite cursor but n
1b250 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53  ot both..**.** S
1b260 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64  ee also OpenRead
1b270 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f  ..*/.case OP_Reo
1b280 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e 74 20  penIdx: {.  int 
1b290 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66  nField;.  KeyInf
1b2a0 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
1b2b0 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62  nt p2;.  int iDb
1b2c0 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a  ;.  int wrFlag;.
1b2d0 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56    Btree *pX;.  V
1b2e0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
1b2f0 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61  .  Db *pDb;..  a
1b300 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1b310 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50  0 || pOp->p5==OP
1b320 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20  FLAG_SEEKEQ );. 
1b330 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1b340 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1b350 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e   );.  pCur = p->
1b360 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1b370 20 20 69 66 28 20 70 43 75 72 20 26 26 20 70 43    if( pCur && pC
1b380 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75  ur->pgnoRoot==(u
1b390 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20  32)pOp->p2 ){.  
1b3a0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
1b3b0 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20  iDb==pOp->p3 ); 
1b3c0 20 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65       /* Guarante
1b3d0 65 64 20 62 79 20 74 68 65 20 63 6f 64 65 20 67  ed by the code g
1b3e0 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20  enerator */.    
1b3f0 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73 6f 72  goto open_cursor
1b400 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a  _set_hints;.  }.
1b410 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73    /* If the curs
1b420 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  or is not curren
1b430 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f  tly open or is o
1b440 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72 65  pen on a differe
1b450 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74  nt.  ** index, t
1b460 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
1b470 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61   into OP_OpenRea
1b480 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65 6f  d to force a reo
1b490 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  pen */.case OP_O
1b4a0 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50  penRead:.case OP
1b4b0 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20 20 61  _OpenWrite:..  a
1b4c0 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 26  ssert( (pOp->p5&
1b4d0 28 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 7c  (OPFLAG_P2ISREG|
1b4e0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f  OPFLAG_BULKCSR|O
1b4f0 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29 3d 3d  PFLAG_SEEKEQ))==
1b500 70 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61 73 73  pOp->p5 );.  ass
1b510 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1b520 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c  ==OP_OpenWrite |
1b530 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  | pOp->p5==0 || 
1b540 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f  pOp->p5==OPFLAG_
1b550 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65  SEEKEQ );.  asse
1b560 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1b570 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1b580 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1b590 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f  enRead || pOp->o
1b5a0 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e  pcode==OP_Reopen
1b5b0 49 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c 7c  Idx.          ||
1b5c0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
1b5d0 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70  );..  if( p->exp
1b5e0 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d  ired ){.    rc =
1b5f0 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
1b600 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 62 72 65 61  LLBACK;.    brea
1b610 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64  k;.  }..  nField
1b620 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f   = 0;.  pKeyInfo
1b630 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70   = 0;.  p2 = pOp
1b640 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f  ->p2;.  iDb = pO
1b650 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
1b660 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
1b670 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1b680 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1b690 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
1b6a0 29 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  ) );.  pDb = &db
1b6b0 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58  ->aDb[iDb];.  pX
1b6c0 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61   = pDb->pBt;.  a
1b6d0 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a  ssert( pX!=0 );.
1b6e0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1b6f0 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1b700 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  ){.    wrFlag = 
1b710 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  1;.    assert( s
1b720 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
1b730 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
1b740 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62  ) );.    if( pDb
1b750 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1b760 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57  format < p->minW
1b770 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29  riteFileFormat )
1b780 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72  {.      p->minWr
1b790 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20  iteFileFormat = 
1b7a0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
1b7b0 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d  le_format;.    }
1b7c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72  .  }else{.    wr
1b7d0 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Flag = 0;.  }.  
1b7e0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
1b7f0 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b 0a  FLAG_P2ISREG ){.
1b800 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
1b810 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1b820 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
1b830 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
1b840 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pIn2 = &aMem[p2]
1b850 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
1b860 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29  mIsValid(pIn2) )
1b870 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
1b880 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
1b890 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20  _Int)!=0 );.    
1b8a0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
1b8b0 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a  tegerify(pIn2);.
1b8c0 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49      p2 = (int)pI
1b8d0 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20  n2->u.i;.    /* 
1b8e0 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77  The p2 value alw
1b8f0 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61  ays comes from a
1b900 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65   prior OP_Create
1b910 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64  Table opcode and
1b920 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63  .    ** that opc
1b930 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
1b940 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65  set the p2 value
1b950 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72   to 2 or more or
1b960 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20   else fail..    
1b970 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65  ** If there were
1b980 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20   a failure, the 
1b990 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
1b9a0 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61  nt would have ha
1b9b0 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f  lted.    ** befo
1b9c0 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73  re reaching this
1b9d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f   instruction. */
1b9e0 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 70  .    if( NEVER(p
1b9f0 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72  2<2) ) {.      r
1ba00 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
1ba10 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67  PT_BKPT;.      g
1ba20 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1ba30 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
1ba40 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  }.  if( pOp->p4t
1ba50 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1ba60 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20  ){.    pKeyInfo 
1ba70 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1ba80 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  fo;.    assert( 
1ba90 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1baa0 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73  NC(db) );.    as
1bab0 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1bac0 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46  db==db );.    nF
1bad0 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  ield = pKeyInfo-
1bae0 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66 6f  >nField+pKeyInfo
1baf0 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65 6c  ->nXField;.  }el
1bb00 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  se if( pOp->p4ty
1bb10 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a  pe==P4_INT32 ){.
1bb20 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
1bb30 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73  ->p4.i;.  }.  as
1bb40 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1bb50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46   );.  assert( nF
1bb60 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73  ield>=0 );.  tes
1bb70 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30  tcase( nField==0
1bb80 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69   );  /* Table wi
1bb90 74 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  th INTEGER PRIMA
1bba0 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69  RY KEY and nothi
1bbb0 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75  ng else */.  pCu
1bbc0 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
1bbd0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e  or(p, pOp->p1, n
1bbe0 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a  Field, iDb, 1);.
1bbf0 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20    if( pCur==0 ) 
1bc00 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1bc10 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  Cur->nullRow = 1
1bc20 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65  ;.  pCur->isOrde
1bc30 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  red = 1;.  pCur-
1bc40 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a  >pgnoRoot = p2;.
1bc50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1bc60 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
1bc70 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e  , wrFlag, pKeyIn
1bc80 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f  fo, pCur->pCurso
1bc90 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79  r);.  pCur->pKey
1bca0 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
1bcb0 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64  .  /* Set the Vd
1bcc0 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65  beCursor.isTable
1bcd0 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76 69   variable. Previ
1bce0 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ous versions of.
1bcf0 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64    ** SQLite used
1bd00 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65   to check if the
1bd10 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73   root-page flags
1bd20 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68   were sane at th
1bd30 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e  is point.  ** an
1bd40 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73  d report databas
1bd50 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20  e corruption if 
1bd60 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62  they were not, b
1bd70 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61  ut this check ha
1bd80 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76  s.  ** since mov
1bd90 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65  ed into the btre
1bda0 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20  e layer.  */  . 
1bdb0 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d   pCur->isTable =
1bdc0 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34   pOp->p4type!=P4
1bdd0 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f  _KEYINFO;..open_
1bde0 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73  cursor_set_hints
1bdf0 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  :.  assert( OPFL
1be00 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45  AG_BULKCSR==BTRE
1be10 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20  E_BULKLOAD );.  
1be20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 53  assert( OPFLAG_S
1be30 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53 45 45  EEKEQ==BTREE_SEE
1be40 4b 5f 45 51 20 29 3b 0a 20 20 73 71 6c 69 74 65  K_EQ );.  sqlite
1be50 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74  3BtreeCursorHint
1be60 73 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c  s(pCur->pCursor,
1be70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1be80 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d             (pOp-
1be90 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 42 55  >p5 & (OPFLAG_BU
1bea0 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45  LKCSR|OPFLAG_SEE
1beb0 4b 45 51 29 29 29 3b 0a 20 20 62 72 65 61 6b 3b  KEQ)));.  break;
1bec0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1bed0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20  penEphemeral P1 
1bee0 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79  P2 * P4 P5.** Sy
1bef0 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
1bf00 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P2.**.** Open a 
1bf10 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f  new cursor P1 to
1bf20 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1bf30 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1bf40 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e  r is always open
1bf50 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76  ed read/write ev
1bf60 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61  en if .** the ma
1bf70 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72  in database is r
1bf80 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65  ead-only.  The e
1bf90 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c  phemeral.** tabl
1bfa0 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74  e is deleted aut
1bfb0 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20  omatically when 
1bfc0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c  the cursor is cl
1bfd0 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  osed..**.** P2 i
1bfe0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1bff0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65  columns in the e
1c000 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a  phemeral table..
1c010 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f  ** The cursor po
1c020 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20  ints to a BTree 
1c030 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61  table if P4==0 a
1c040 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e  nd to a BTree in
1c050 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20  dex.** if P4 is 
1c060 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73  not 0.  If P4 is
1c070 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f   not NULL, it po
1c080 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66  ints to a KeyInf
1c090 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74  o structure.** t
1c0a0 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
1c0b0 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69  format of keys i
1c0c0 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a  n the index..**.
1c0d0 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
1c0e0 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73  ter can be a mas
1c0f0 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a  k of the BTREE_*
1c100 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a   flags defined.*
1c110 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54  * in btree.h.  T
1c120 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72  hese flags contr
1c130 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68  ol aspects of th
1c140 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a  e operation of.*
1c150 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54 68  * the btree.  Th
1c160 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55  e BTREE_OMIT_JOU
1c170 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53  RNAL and BTREE_S
1c180 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a  INGLE flags are.
1c190 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74  ** added automat
1c1a0 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70  ically..*/./* Op
1c1b0 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e  code: OpenAutoin
1c1c0 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a  dex P1 P2 * P4 *
1c1d0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43  .** Synopsis: nC
1c1e0 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54  olumn=P2.**.** T
1c1f0 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
1c200 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f   the same as OP_
1c210 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20  OpenEphemeral.  
1c220 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66  It has a.** diff
1c230 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69  erent name to di
1c240 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75 73  stinguish its us
1c250 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61 74  e.  Tables creat
1c260 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74  ed using.** by t
1c270 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
1c280 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f  be used for auto
1c290 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
1c2a0 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69  d transient.** i
1c2b0 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e  ndices in joins.
1c2c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
1c2d0 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65  Autoindex: .case
1c2e0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1c2f0 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  l: {.  VdbeCurso
1c300 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66  r *pCx;.  KeyInf
1c310 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20  o *pKeyInfo;..  
1c320 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
1c330 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20   vfsFlags = .   
1c340 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52     SQLITE_OPEN_R
1c350 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20  EADWRITE |.     
1c360 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45   SQLITE_OPEN_CRE
1c370 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ATE |.      SQLI
1c380 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56  TE_OPEN_EXCLUSIV
1c390 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1c3a0 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c  _OPEN_DELETEONCL
1c3b0 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  OSE |.      SQLI
1c3c0 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e  TE_OPEN_TRANSIEN
1c3d0 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20  T_DB;.  assert( 
1c3e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1c3f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1c400 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1c410 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1c420 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
1c430 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20  , -1, 1);.  if( 
1c440 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1c450 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1c460 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1c470 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31  >isEphemeral = 1
1c480 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1c490 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56  BtreeOpen(db->pV
1c4a0 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d  fs, 0, db, &pCx-
1c4b0 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20  >pBt, .         
1c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1c4d0 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1c4e0 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
1c4f0 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
1c500 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
1c510 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1c520 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1c530 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
1c540 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a  x->pBt, 1);.  }.
1c550 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1c560 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  _OK ){.    /* If
1c570 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1c580 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  ex is required, 
1c590 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c  create it by cal
1c5a0 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ling.    ** sqli
1c5b0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
1c5c0 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42  ble() with the B
1c5d0 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61  TREE_BLOBKEY fla
1c5e0 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20  g before.    ** 
1c5f0 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61  opening it. If a
1c600 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1c610 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75   is required, ju
1c620 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a  st use the.    *
1c630 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
1c640 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69  created table wi
1c650 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28  th root-page 1 (
1c660 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74  an BLOB_INTKEY t
1c670 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  able)..    */.  
1c680 20 20 69 66 28 20 28 70 4b 65 79 49 6e 66 6f 20    if( (pKeyInfo 
1c690 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1c6a0 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  fo)!=0 ){.      
1c6b0 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20  int pgno;.      
1c6c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1c6d0 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1c6e0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
1c6f0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1c700 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20  Table(pCx->pBt, 
1c710 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f  &pgno, BTREE_BLO
1c720 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b  BKEY | pOp->p5);
1c730 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d   .      if( rc==
1c740 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1c750 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e       assert( pgn
1c760 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  o==MASTER_ROOT+1
1c770 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1c780 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1c790 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20  ==db );.        
1c7a0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1c7b0 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1c7c0 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70  ;.        pCx->p
1c7d0 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1c7e0 66 6f 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  fo;.        rc =
1c7f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1c800 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67  sor(pCx->pBt, pg
1c810 6e 6f 2c 20 31 2c 20 70 4b 65 79 49 6e 66 6f 2c  no, 1, pKeyInfo,
1c820 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a   pCx->pCursor);.
1c830 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
1c840 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a  x->isTable = 0;.
1c850 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1c860 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1c870 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
1c880 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  t, MASTER_ROOT, 
1c890 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73  1, 0, pCx->pCurs
1c8a0 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e  or);.      pCx->
1c8b0 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20  isTable = 1;.   
1c8c0 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73   }.  }.  pCx->is
1c8d0 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e  Ordered = (pOp->
1c8e0 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45  p5!=BTREE_UNORDE
1c8f0 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  RED);.  break;.}
1c900 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
1c910 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33  terOpen P1 P2 P3
1c920 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
1c930 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69   opcode works li
1c940 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  ke OP_OpenEpheme
1c950 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74 20  ral except that 
1c960 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72  it opens.** a tr
1c970 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68  ansient index th
1c980 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61 6c  at is specifical
1c990 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73  ly designed to s
1c9a0 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62  ort large.** tab
1c9b0 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74  les using an ext
1c9c0 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74  ernal merge-sort
1c9d0 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a   algorithm..**.*
1c9e0 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33  * If argument P3
1c9f0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
1ca00 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73 20  en it indicates 
1ca10 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72 20  that the sorter 
1ca20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68  may.** assume th
1ca30 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74  at a stable sort
1ca40 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65   considering the
1ca50 20 66 69 72 73 74 20 50 33 20 66 69 65 6c 64 73   first P3 fields
1ca60 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20   of each.** key 
1ca70 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f  is sufficient to
1ca80 20 70 72 6f 64 75 63 65 20 74 68 65 20 72 65 71   produce the req
1ca90 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a  uired results..*
1caa0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
1cab0 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
1cac0 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73  rsor *pCx;..  as
1cad0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1cae0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1caf0 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p2>=0 );.  pC
1cb00 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1cb10 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1cb20 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a  Op->p2, -1, 1);.
1cb30 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1cb40 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1cb50 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  x->pKeyInfo = pO
1cb60 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
1cb70 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70    assert( pCx->p
1cb80 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20  KeyInfo->db==db 
1cb90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  );.  assert( pCx
1cba0 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ->pKeyInfo->enc=
1cbb0 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63  =ENC(db) );.  rc
1cbc0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
1cbd0 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70 4f 70  rterInit(db, pOp
1cbe0 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20 62 72  ->p3, pCx);.  br
1cbf0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1cc00 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74 20  e: SequenceTest 
1cc10 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
1cc20 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72  ynopsis: if( cur
1cc30 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20  sor[P1].ctr++ ) 
1cc40 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31  pc = P2.**.** P1
1cc50 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72   is a sorter cur
1cc60 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71 75  sor. If the sequ
1cc70 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ence counter is 
1cc80 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20  currently zero, 
1cc90 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52  jump.** to P2. R
1cca0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
1ccb0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
1ccc0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69  jump is taken, i
1ccd0 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  ncrement the.** 
1cce0 74 68 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c  the sequence val
1ccf0 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ue..*/.case OP_S
1cd00 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20  equenceTest: {. 
1cd10 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1cd20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1cd30 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1cd40 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1cd50 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1cd60 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1cd70 74 28 20 70 43 2d 3e 70 53 6f 72 74 65 72 20 29  t( pC->pSorter )
1cd80 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71  ;.  if( (pC->seq
1cd90 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20  Count++)==0 ){. 
1cda0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
1cdb0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
1cdc0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1cdd0 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20  penPseudo P1 P2 
1cde0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
1cdf0 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69  is: P3 columns i
1ce00 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70  n r[P2].**.** Op
1ce10 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1ce20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
1ce30 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74   fake table that
1ce40 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
1ce50 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74  le.** row of dat
1ce60 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  a.  The content 
1ce70 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  of that one row 
1ce80 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  is the content o
1ce90 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69  f memory.** regi
1cea0 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68  ster P2.  In oth
1ceb0 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72  er words, cursor
1cec0 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61   P1 becomes an a
1ced0 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a  lias for the .**
1cee0 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e   MEM_Blob conten
1cef0 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72  t contained in r
1cf00 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1cf10 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  * A pseudo-table
1cf20 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73   created by this
1cf30 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
1cf40 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65  to hold a single
1cf50 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66  .** row output f
1cf60 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73  rom the sorter s
1cf70 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63  o that the row c
1cf80 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64  an be decomposed
1cf90 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64   into.** individ
1cfa0 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e  ual columns usin
1cfb0 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20  g the OP_Column 
1cfc0 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f  opcode.  The OP_
1cfd0 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a  Column opcode.**
1cfe0 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72   is the only cur
1cff0 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20  sor opcode that 
1d000 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65  works with a pse
1d010 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
1d020 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P3 is the numbe
1d030 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
1d040 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20  he records that 
1d050 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62  will be stored b
1d060 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d  y.** the pseudo-
1d070 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
1d080 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a  P_OpenPseudo: {.
1d090 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1d0a0 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
1d0b0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1d0c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
1d0d0 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1d0e0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1d0f0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20  p->p1, pOp->p3, 
1d100 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43  -1, 0);.  if( pC
1d110 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
1d120 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52  em;.  pCx->nullR
1d130 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70  ow = 1;.  pCx->p
1d140 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20  seudoTableReg = 
1d150 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e  pOp->p2;.  pCx->
1d160 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61  isTable = 1;.  a
1d170 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1d180 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  0 );.  break;.}.
1d190 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73  ./* Opcode: Clos
1d1a0 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
1d1b0 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f  ** Close a curso
1d1c0 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  r previously ope
1d1d0 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50  ned as P1.  If P
1d1e0 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72  1 is not.** curr
1d1f0 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73  ently open, this
1d200 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1d210 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
1d220 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61   OP_Close: {.  a
1d230 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1d240 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1d250 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c  nCursor );.  sql
1d260 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
1d270 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70  or(p, p->apCsr[p
1d280 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61  Op->p1]);.  p->a
1d290 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  pCsr[pOp->p1] = 
1d2a0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  0;.  break;.}..#
1d2b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1d2c0 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f  BLE_COLUMN_USED_
1d2d0 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  MASK./* Opcode: 
1d2e0 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a  ColumnsUsed P1 *
1d2f0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   * P4 *.**.** Th
1d300 69 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68  is opcode (which
1d310 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20   only exists if 
1d320 53 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69  SQLite was compi
1d330 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  led with.** SQLI
1d340 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
1d350 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e  _USED_MASK) iden
1d360 74 69 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c  tifies which col
1d370 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74  umns of the.** t
1d380 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f  able or index fo
1d390 72 20 63 75 72 73 6f 72 20 50 31 20 61 72 65 20  r cursor P1 are 
1d3a0 75 73 65 64 2e 20 20 50 34 20 69 73 20 61 20 36  used.  P4 is a 6
1d3b0 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
1d3c0 20 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77   (P4_INT64) in w
1d3d0 68 69 63 68 20 74 68 65 20 66 69 72 73 74 20 36  hich the first 6
1d3e0 33 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66  3 bits are one f
1d3f0 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a  or each of the.*
1d400 2a 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d  * first 63 colum
1d410 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
1d420 6f 72 20 69 6e 64 65 78 20 74 68 61 74 20 61 72  or index that ar
1d430 65 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a  e actually used.
1d440 2a 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f 72  ** by the cursor
1d450 2e 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65  .  The high-orde
1d460 72 20 62 69 74 20 69 73 20 73 65 74 20 69 66 20  r bit is set if 
1d470 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72  any column after
1d480 0a 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73 20  .** the 64th is 
1d490 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  used..*/.case OP
1d4a0 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a  _ColumnsUsed: {.
1d4b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1d4c0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1d4d0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1d4e0 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
1d4f0 72 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55  r );.  pC->maskU
1d500 73 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70  sed = *(u64*)pOp
1d510 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65  ->p4.pI64;.  bre
1d520 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
1d530 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20   Opcode: SeekGE 
1d540 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1d550 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1d560 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1d570 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1d580 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1d590 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1d5a0 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1d5b0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1d5c0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1d5d0 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20   P3 as the key. 
1d5e0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1d5f0 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1d600 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1d610 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1d620 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1d630 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1d640 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1d650 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1d660 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1d670 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1d680 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1d690 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
1d6a0 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
1d6b0 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
1d6c0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1d6d0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1d6e0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1d6f0 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61  records .** grea
1d700 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
1d710 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
1d720 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1d730 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1d740 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1d750 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1d760 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1d770 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
1d780 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
1d790 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1d7a0 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
1d7b0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1d7c0 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1d7d0 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1d7e0 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
1d7f0 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
1d800 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1d810 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
1d820 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGt, SeekLe.*/.
1d830 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1d840 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  T P1 P2 P3 P4 *.
1d850 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1d860 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1d870 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1d880 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1d890 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1d8a0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1d8b0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1d8c0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1d8d0 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1d8e0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1d8f0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1d900 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1d910 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1d920 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1d930 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1d940 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1d950 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1d960 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1d970 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1d980 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1d990 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1d9a0 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1d9b0 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1d9c0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1d9d0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1d9e0 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
1d9f0 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
1da00 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1da10 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1da20 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1da30 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1da40 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1da50 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1da60 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
1da70 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
1da80 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
1da90 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
1daa0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1dab0 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1dac0 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
1dad0 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a  , not Prev..**.*
1dae0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1daf0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1db00 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
1db10 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1db20 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50  : SeekLT P1 P2 P
1db30 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70  3 P4 * .** Synop
1db40 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1db50 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1db60 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1db70 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1db80 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1db90 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1dba0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1dbb0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1dbc0 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1dbd0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1dbe0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1dbf0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1dc00 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1dc10 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1dc20 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1dc30 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1dc40 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1dc50 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1dc60 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1dc70 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1dc80 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1dc90 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1dca0 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
1dcb0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1dcc0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c  are no records l
1dcd0 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ess than .** the
1dce0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1dcf0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1dd00 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1dd10 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1dd20 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1dd30 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1dd40 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
1dd50 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
1dd60 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
1dd70 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
1dd80 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1dd90 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1dda0 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
1ddb0 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
1ddc0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1ddd0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1dde0 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1ddf0 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1de00 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20  e: SeekLE P1 P2 
1de10 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1de20 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1de30 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1de40 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1de50 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1de60 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1de70 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1de80 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1de90 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1dea0 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1deb0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1dec0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1ded0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1dee0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1def0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1df00 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1df10 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1df20 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1df30 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1df40 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1df50 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1df60 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1df70 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1df80 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1df90 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1dfa0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1dfb0 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65  o records .** le
1dfc0 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1dfd0 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1dfe0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1dff0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1e000 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1e010 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1e020 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1e030 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
1e040 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
1e050 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
1e060 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
1e070 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1e080 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1e090 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1e0a0 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
1e0b0 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  xt..**.** See al
1e0c0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1e0d0 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  und, SeekGt, See
1e0e0 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63  kGe, SeekLt.*/.c
1e0f0 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20  ase OP_SeekLT:  
1e100 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1e110 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1e120 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f  eekLE:         /
1e130 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1e140 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20  ase OP_SeekGE:  
1e150 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1e160 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1e170 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f  eekGT: {       /
1e180 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1e190 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20   int res;.  int 
1e1a0 6f 63 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  oc;.  VdbeCursor
1e1b0 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64   *pC;.  Unpacked
1e1c0 52 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20  Record r;.  int 
1e1d0 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b  nField;.  i64 iK
1e1e0 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ey;      /* The 
1e1f0 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f 20  rowid we are to 
1e200 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73  seek to */..  as
1e210 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1e220 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1e230 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1e240 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29  rt( pOp->p2!=0 )
1e250 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1e260 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1e270 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1e280 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
1e290 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
1e2a0 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1e2b0 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekLE == OP_Seek
1e2c0 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+1 );.  assert
1e2d0 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f  ( OP_SeekGE == O
1e2e0 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20  P_SeekLT+2 );.  
1e2f0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1e300 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33  T == OP_SeekLT+3
1e310 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1e320 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
1e330 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1e340 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20  rsor!=0 );.  oc 
1e350 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
1e360 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
1e370 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1e380 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
1e390 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  Op = pOp->opcode
1e3a0 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 46  ;.#endif..  /* F
1e3b0 6f 72 20 61 20 63 75 72 73 6f 72 20 77 69 74 68  or a cursor with
1e3c0 20 74 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f   the BTREE_SEEK_
1e3d0 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20 74 68  EQ hint, only th
1e3e0 65 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e 64 0a  e OP_SeekGE and.
1e3f0 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45 20 6f    ** OP_SeekLE o
1e400 70 63 6f 64 65 73 20 61 72 65 20 61 6c 6c 6f 77  pcodes are allow
1e410 65 64 2c 20 61 6e 64 20 74 68 65 73 65 20 6d 75  ed, and these mu
1e420 73 74 20 62 65 20 69 6d 6d 65 64 69 61 74 65 6c  st be immediatel
1e430 79 20 66 6f 6c 6c 6f 77 65 64 0a 20 20 2a 2a 20  y followed.  ** 
1e440 62 79 20 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f  by an OP_IdxGT o
1e450 72 20 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64  r OP_IdxLT opcod
1e460 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  e, respectively,
1e470 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b   with the same k
1e480 65 79 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20  ey..  */.#ifdef 
1e490 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
1e4a0 66 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  f( sqlite3BtreeC
1e4b0 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d  ursorHasHint(pC-
1e4c0 3e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f  >pCursor, BTREE_
1e4d0 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20  SEEK_EQ) ){.    
1e4e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
1e4f0 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c  ode==OP_SeekGE |
1e500 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
1e510 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20  P_SeekLE );.    
1e520 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f  assert( pOp[1].o
1e530 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
1e540 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  || pOp[1].opcode
1e550 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
1e560 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
1e570 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20 29  .p1==pOp[0].p1 )
1e580 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
1e590 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e  p[1].p2==pOp[0].
1e5a0 70 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  p2 );.    assert
1e5b0 28 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70  ( pOp[1].p3==pOp
1e5c0 5b 30 5d 2e 70 33 20 29 3b 0a 20 20 20 20 61 73  [0].p3 );.    as
1e5d0 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e  sert( pOp[1].p4.
1e5e0 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29  i==pOp[0].p4.i )
1e5f0 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 0a 20  ;.  }.#endif. . 
1e600 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
1e610 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 69   ){.    /* The i
1e620 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33  nput value in P3
1e630 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79   might be of any
1e640 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20   type: integer, 
1e650 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20  real, string,.  
1e660 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55    ** blob, or NU
1e670 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64  LL.  But it need
1e680 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  s to be an integ
1e690 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e  er before we can
1e6a0 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73   do.    ** the s
1e6b0 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20  eek, so convert 
1e6c0 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20  it. */.    pIn3 
1e6d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1e6e0 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d  ;.    if( (pIn3-
1e6f0 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
1e700 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
1e710 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
1e720 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65  .      applyNume
1e730 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33  ricAffinity(pIn3
1e740 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 0);.    }.    
1e750 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  iKey = sqlite3Vd
1e760 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29  beIntValue(pIn3)
1e770 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ;..    /* If the
1e780 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20   P3 value could 
1e790 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
1e7a0 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
1e7b0 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20   without.    ** 
1e7c0 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
1e7d0 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61  ion, then specia
1e7e0 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  l processing is 
1e7f0 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20  required... */. 
1e800 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1e810 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
1e820 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  0 ){.      if( (
1e830 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1e840 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Real)==0 ){.  
1e850 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1e860 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20  P3 value cannot 
1e870 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
1e880 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20  o any kind of a 
1e890 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20  number,.        
1e8a0 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b  ** then the seek
1e8b0 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
1e8c0 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20  , so jump to P2 
1e8d0 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 42  */.        VdbeB
1e8e0 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b  ranchTaken(1,2);
1e8f0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
1e900 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
1e910 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1e920 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78  /* If the approx
1e930 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20  imation iKey is 
1e940 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20  larger than the 
1e950 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72  actual real sear
1e960 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d  ch.      ** term
1e970 2c 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20  , substitute >= 
1e980 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20  for > and < for 
1e990 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20  <=. e.g. if the 
1e9a0 73 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20  search term.    
1e9b0 20 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20    ** is 4.9 and 
1e9c0 74 68 65 20 69 6e 74 65 67 65 72 20 61 70 70 72  the integer appr
1e9d0 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20  oximation 5:.   
1e9e0 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20     **.      **  
1e9f0 20 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29        (x >  4.9)
1ea00 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d      ->     (x >=
1ea10 20 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   5).      **    
1ea20 20 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20      (x <= 4.9)  
1ea30 20 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35    ->     (x <  5
1ea40 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ).      */.     
1ea50 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28   if( pIn3->u.r<(
1ea60 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20  double)iKey ){. 
1ea70 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
1ea80 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65  P_SeekGE==(OP_Se
1ea90 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20  ekGT-1) );.     
1eaa0 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1eab0 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45  ekLT==(OP_SeekLE
1eac0 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  -1) );.        a
1ead0 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c  ssert( (OP_SeekL
1eae0 45 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  E & 0x0001)==(OP
1eaf0 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31  _SeekGT & 0x0001
1eb00 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ) );.        if(
1eb10 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d   (oc & 0x0001)==
1eb20 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30  (OP_SeekGT & 0x0
1eb30 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20  001) ) oc--;.   
1eb40 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
1eb50 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  f the approximat
1eb60 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c  ion iKey is smal
1eb70 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74  ler than the act
1eb80 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a  ual real search.
1eb90 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73        ** term, s
1eba0 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72  ubstitute <= for
1ebb0 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e   < and > for >=.
1ebc0 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20    */.      else 
1ebd0 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64  if( pIn3->u.r>(d
1ebe0 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20  ouble)iKey ){.  
1ebf0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
1ec00 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65  _SeekLE==(OP_See
1ec10 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20  kLT+1) );.      
1ec20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1ec30 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b  kGT==(OP_SeekGE+
1ec40 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1ec50 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54  sert( (OP_SeekLT
1ec60 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
1ec70 53 65 65 6b 47 45 20 26 20 30 78 30 30 30 31 29  SeekGE & 0x0001)
1ec80 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   );.        if( 
1ec90 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28  (oc & 0x0001)==(
1eca0 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30  OP_SeekLT & 0x00
1ecb0 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20  01) ) oc++;.    
1ecc0 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72    }.    } .    r
1ecd0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1ece0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1ecf0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  C->pCursor, 0, (
1ed00 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65  u64)iKey, 0, &re
1ed10 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65  s);.    pC->move
1ed20 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b  toTarget = iKey;
1ed30 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f    /* Used by OP_
1ed40 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66  Delete */.    if
1ed50 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1ed60 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
1ed70 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1ed80 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1ed90 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
1eda0 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73  p->p4.i;.    ass
1edb0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1edc0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1edd0 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
1ede0 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79  >0 );.    r.pKey
1edf0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
1ee00 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
1ee10 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b  d = (u16)nField;
1ee20 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  ..    /* The nex
1ee30 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63  t line of code c
1ee40 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f  omputes as follo
1ee50 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a  ws, only faster:
1ee60 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63  .    **   if( oc
1ee70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f  ==OP_SeekGT || o
1ee80 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a  c==OP_SeekLE ){.
1ee90 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66      **     r.def
1eea0 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
1eeb0 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20    **   }else{.  
1eec0 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75    **     r.defau
1eed0 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20  lt_rc = +1;.    
1eee0 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20  **   }.    */.  
1eef0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
1ef00 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f   ((1 & (oc - OP_
1ef10 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20  SeekLT)) ? -1 : 
1ef20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  +1);.    assert(
1ef30 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc!=OP_SeekGT |
1ef40 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
1ef50 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
1ef60 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20  ( oc!=OP_SeekLE 
1ef70 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
1ef80 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
1ef90 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45  t( oc!=OP_SeekGE
1efa0 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
1efb0 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==+1 );.    asse
1efc0 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
1efd0 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
1efe0 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e  c==+1 );..    r.
1eff0 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
1f000 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
1f010 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
1f020 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
1f030 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
1f040 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
1f050 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
1f060 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
1f070 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d   ExpandBlob(r.aM
1f080 65 6d 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  em);.    rc = sq
1f090 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1f0a0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1f0b0 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  rsor, &r, 0, 0, 
1f0c0 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72  &res);.    if( r
1f0d0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1f0e0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1f0f0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1f100 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64     }.  }.  pC->d
1f110 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1f120 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
1f130 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1f140 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  LE;.#ifdef SQLIT
1f150 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
1f160 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b  _search_count++;
1f170 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63  .#endif.  if( oc
1f180 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20  >=OP_SeekGE ){  
1f190 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1f1a0 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGE || oc==OP_
1f1b0 53 65 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66  SeekGT );.    if
1f1c0 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d  ( res<0 || (res=
1f1d0 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1f1e0 6b 47 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65  kGT) ){.      re
1f1f0 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  s = 0;.      rc 
1f200 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  = sqlite3BtreeNe
1f210 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  xt(pC->pCursor, 
1f220 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
1f230 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1f240 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1f250 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65  to_error;.    }e
1f260 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  lse{.      res =
1f270 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   0;.    }.  }els
1f280 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  e{.    assert( o
1f290 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  c==OP_SeekLT || 
1f2a0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b  oc==OP_SeekLE );
1f2b0 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c  .    if( res>0 |
1f2c0 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
1f2d0 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20  =OP_SeekLT) ){. 
1f2e0 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1f2f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1f300 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43  BtreePrevious(pC
1f310 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1f320 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
1f330 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1f340 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1f350 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ror;.    }else{.
1f360 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67        /* res mig
1f370 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62  ht be negative b
1f380 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
1f390 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63   is empty.  Chec
1f3a0 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65  k to.      ** se
1f3b0 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65  e if this is the
1f3c0 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a   case..      */.
1f3d0 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69        res = sqli
1f3e0 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e  te3BtreeEof(pC->
1f3f0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
1f400 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
1f410 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62  p->p2>0 );.  Vdb
1f420 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
1f430 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
1f440 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  s ){.    goto ju
1f450 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
1f460 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1f470 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32 20  ode: Seek P1 P2 
1f480 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
1f490 73 3a 20 20 69 6e 74 6b 65 79 3d 72 5b 50 32 5d  s:  intkey=r[P2]
1f4a0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20  .**.** P1 is an 
1f4b0 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73 6f  open table curso
1f4c0 72 20 61 6e 64 20 50 32 20 69 73 20 61 20 72 6f  r and P2 is a ro
1f4d0 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41 72  wid integer.  Ar
1f4e0 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20  range.** for P1 
1f4f0 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74 20  to move so that 
1f500 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1f510 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79 20   rowid given by 
1f520 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
1f530 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65 66  s actually a def
1f540 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74  erred seek.  Not
1f550 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61  hing actually ha
1f560 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74  ppens until.** t
1f570 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65  he cursor is use
1f580 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f  d to read a reco
1f590 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69  rd.  That way, i
1f5a0 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63  f no reads.** oc
1f5b0 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73  cur, no unnecess
1f5c0 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e  ary I/O happens.
1f5d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
1f5e0 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f  : {    /* in2 */
1f5f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f600 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  C;..  assert( pO
1f610 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1f620 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1f630 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1f640 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1f650 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1f660 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1f670 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
1f680 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1f690 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   );.  pC->nullRo
1f6a0 77 20 3d 20 30 3b 0a 20 20 70 49 6e 32 20 3d 20  w = 0;.  pIn2 = 
1f6b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
1f6c0 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
1f6d0 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  et = sqlite3Vdbe
1f6e0 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
1f6f0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1f700 76 65 74 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61  veto = 1;.  brea
1f710 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f  k;.}.  ../* Opco
1f720 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20  de: Found P1 P2 
1f730 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1f740 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1f750 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
1f760 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1f770 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1f780 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1f790 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
1f7a0 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
1f7b0 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
1f7c0 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
1f7d0 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
1f7e0 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
1f7f0 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f  ord..**.** Curso
1f800 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
1f810 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
1f820 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
1f830 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
1f840 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78  4.** is a prefix
1f850 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
1f860 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
1f870 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e  is made to P2 an
1f880 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20  d.** P1 is left 
1f890 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
1f8a0 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
1f8b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
1f8c0 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
1f8d0 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
1f8e0 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 20 62  e where it can b
1f8f0 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
1f900 20 74 68 65 20 66 6f 72 77 61 72 64 20 64 69 72   the forward dir
1f910 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78  ection.  The Nex
1f920 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
1f930 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20  ll work,.** but 
1f940 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e 73  not the Prev ins
1f950 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
1f960 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
1f970 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20  nd, NoConflict, 
1f980 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47  NotExists. SeekG
1f990 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1f9a0 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50  NotFound P1 P2 P
1f9b0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1f9c0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1f9d0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1f9e0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1f9f0 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1fa00 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1fa10 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1fa20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1fa30 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1fa40 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1fa50 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1fa60 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1fa70 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
1fa80 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
1fa90 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
1faa0 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
1fab0 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
1fac0 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20  4.** is not the 
1fad0 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
1fae0 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
1faf0 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
1fb00 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20   P2.  If P1 .** 
1fb10 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20  does contain an 
1fb20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66  entry whose pref
1fb30 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50  ix matches the P
1fb40 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e  3/P4 record then
1fb50 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c   control.** fall
1fb60 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  s through to the
1fb70 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
1fb80 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74  n and P1 is left
1fb90 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1fba0 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  .** matching ent
1fbb0 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ry..**.** This o
1fbc0 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
1fbd0 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
1fbe0 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
1fbf0 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61  annot be.** adva
1fc00 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64  nced in either d
1fc10 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
1fc20 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
1fc30 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20  ext and Prev.** 
1fc40 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77  opcodes do not w
1fc50 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f  ork after this o
1fc60 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  peration..**.** 
1fc70 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1fc80 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f   NotExists, NoCo
1fc90 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63  nflict.*/./* Opc
1fca0 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20  ode: NoConflict 
1fcb0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1fcc0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1fcd0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1fce0 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
1fcf0 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
1fd00 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1fd10 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
1fd20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
1fd30 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
1fd40 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
1fd50 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
1fd60 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
1fd70 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
1fd80 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
1fd90 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
1fda0 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
1fdb0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
1fdc0 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74  3 and P4.** cont
1fdd0 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61  ains any NULL va
1fde0 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69  lue, jump immedi
1fdf0 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
1fe00 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68   all terms of th
1fe10 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20  e.** record are 
1fe20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20  not-NULL then a 
1fe30 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f  check is done to
1fe40 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e   determine if an
1fe50 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20  y row in the.** 
1fe60 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68  P1 index btree h
1fe70 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65  as a matching ke
1fe80 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68  y prefix.  If th
1fe90 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68  ere are no match
1fea0 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65  es, jump.** imme
1feb0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
1fec0 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61  If there is a ma
1fed0 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  tch, fall throug
1fee0 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20  h and leave the 
1fef0 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69  P1.** cursor poi
1ff00 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74  nting to the mat
1ff10 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a  ching row..**.**
1ff20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
1ff30 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f  similar to OP_No
1ff40 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20  tFound with the 
1ff50 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20  exceptions that 
1ff60 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73  the.** branch is
1ff70 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66   always taken if
1ff80 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65   any part of the
1ff90 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75   search key inpu
1ffa0 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t is NULL..**.**
1ffb0 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
1ffc0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1ffd0 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
1ffe0 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a  re it cannot be.
1fff0 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65  ** advanced in e
20000 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
20010 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
20020 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
20030 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64  rev.** opcodes d
20040 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72  o not work after
20050 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e   this operation.
20060 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
20070 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64   NotFound, Found
20080 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63  , NotExists.*/.c
20090 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  ase OP_NoConflic
200a0 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20  t:     /* jump, 
200b0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
200c0 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f  otFound:       /
200d0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
200e0 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20  ase OP_Found: { 
200f0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
20100 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72  in3 */.  int alr
20110 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e  eadyExists;.  in
20120 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e  t takeJump;.  in
20130 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73  t ii;.  VdbeCurs
20140 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
20150 73 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65  s;.  char *pFree
20160 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
20170 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55  rd *pIdxKey;.  U
20180 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
20190 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63  .  char aTempRec
201a0 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55  [ROUND8(sizeof(U
201b0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20  npackedRecord)) 
201c0 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20  + sizeof(Mem)*4 
201d0 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51  + 7];..#ifdef SQ
201e0 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20  LITE_TEST.  if( 
201f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
20200 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c  NoConflict ) sql
20210 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
20220 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73  ++;.#endif..  as
20230 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
20240 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
20250 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
20260 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
20270 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70  =P4_INT32 );.  p
20280 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
20290 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
202a0 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66   pC!=0 );.#ifdef
202b0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
202c0 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70  pC->seekOp = pOp
202d0 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66  ->opcode;.#endif
202e0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
202f0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
20300 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
20310 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
20320 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
20330 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 0a 20  ;.  pFree = 0;. 
20340 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30   if( pOp->p4.i>0
20350 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
20360 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
20370 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
20380 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
20390 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70  ;.    r.aMem = p
203a0 49 6e 33 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d  In3;.    for(ii=
203b0 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  0; ii<r.nField; 
203c0 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73  ii++){.      ass
203d0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
203e0 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a  &r.aMem[ii]) );.
203f0 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62        ExpandBlob
20400 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23  (&r.aMem[ii]);.#
20410 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
20420 55 47 0a 20 20 20 20 20 20 69 66 28 20 69 69 20  UG.      if( ii 
20430 29 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  ) REGISTER_TRACE
20440 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e  (pOp->p3+ii, &r.
20450 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69  aMem[ii]);.#endi
20460 66 0a 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78  f.    }.    pIdx
20470 4b 65 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73  Key = &r;.  }els
20480 65 7b 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d  e{.    pIdxKey =
20490 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f   sqlite3VdbeAllo
204a0 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28  cUnpackedRecord(
204b0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65  .        pC->pKe
204c0 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c  yInfo, aTempRec,
204d0 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63   sizeof(aTempRec
204e0 29 2c 20 26 70 46 72 65 65 0a 20 20 20 20 29 3b  ), &pFree.    );
204f0 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79  .    if( pIdxKey
20500 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
20510 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
20520 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
20530 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 45 78 70  _Blob );.    Exp
20540 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20  andBlob(pIn3);. 
20550 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
20560 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70  cordUnpack(pC->p
20570 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e  KeyInfo, pIn3->n
20580 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b  , pIn3->z, pIdxK
20590 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b  ey);.  }.  pIdxK
205a0 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d  ey->default_rc =
205b0 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d   0;.  takeJump =
205c0 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   0;.  if( pOp->o
205d0 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode==OP_NoConf
205e0 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46  lict ){.    /* F
205f0 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66  or the OP_NoConf
20600 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b  lict opcode, tak
20610 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
20620 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  y of the.    ** 
20630 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65  input fields are
20640 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79   NULL, since any
20650 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c   key with a NULL
20660 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a   will not.    **
20670 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20   conflict */.   
20680 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49   for(ii=0; ii<pI
20690 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69  dxKey->nField; i
206a0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
206b0 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69  pIdxKey->aMem[ii
206c0 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
206d0 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61  ll ){.        ta
206e0 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20  keJump = 1;.    
206f0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
20700 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
20710 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
20720 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
20730 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78  C->pCursor, pIdx
20740 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29  Key, 0, 0, &res)
20750 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
20760 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20  e(db, pFree);.  
20770 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
20780 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  K ){.    break;.
20790 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65    }.  pC->seekRe
207a0 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c  sult = res;.  al
207b0 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72  readyExists = (r
207c0 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75  es==0);.  pC->nu
207d0 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64  llRow = 1-alread
207e0 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64  yExists;.  pC->d
207f0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
20800 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
20810 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
20820 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  LE;.  if( pOp->o
20830 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
20840 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
20850 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78  hTaken(alreadyEx
20860 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
20870 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74  if( alreadyExist
20880 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
20890 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  _p2;.  }else{.  
208a0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
208b0 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65  n(takeJump||alre
208c0 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b  adyExists==0,2);
208d0 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75 6d  .    if( takeJum
208e0 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78 69  p || !alreadyExi
208f0 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  sts ) goto jump_
20900 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
20910 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
20920 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50  : NotExists P1 P
20930 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
20940 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50  psis: intkey=r[P
20950 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  3].**.** P1 is t
20960 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75  he index of a cu
20970 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20  rsor open on an 
20980 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20  SQL table btree 
20990 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a  (with integer.**
209a0 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73 20 61   keys).  P3 is a
209b0 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e  n integer rowid.
209c0 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e 6f 74    If P1 does not
209d0 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72   contain a recor
209e0 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20  d with.** rowid 
209f0 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  P3 then jump imm
20a00 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
20a10 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74   If P1 does cont
20a20 61 69 6e 20 61 20 72 65 63 6f 72 64 0a 2a 2a 20  ain a record.** 
20a30 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68  with rowid P3 th
20a40 65 6e 20 6c 65 61 76 65 20 74 68 65 20 63 75 72  en leave the cur
20a50 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  sor pointing at 
20a60 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20  that record and 
20a70 66 61 6c 6c 0a 2a 2a 20 74 68 72 6f 75 67 68 20  fall.** through 
20a80 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
20a90 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
20aa0 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f  he OP_NotFound o
20ab0 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
20ac0 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
20ad0 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n on index btree
20ae0 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74  s.** (with arbit
20af0 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65  rary multi-value
20b00 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68   keys)..**.** Th
20b10 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
20b20 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
20b30 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
20b40 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63  cannot be advanc
20b50 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20  ed.** in either 
20b60 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
20b70 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
20b80 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70  Next and Prev op
20b90 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f  codes will.** no
20ba0 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67  t work following
20bb0 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
20bc0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
20bd0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  und, NotFound, N
20be0 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61 73  oConflict.*/.cas
20bf0 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20  e OP_NotExists: 
20c00 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
20c10 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43  , in3 */.  VdbeC
20c20 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
20c30 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
20c40 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69  int res;.  u64 i
20c50 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26  Key;..  pIn3 = &
20c60 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
20c70 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
20c80 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
20c90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
20ca0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
20cb0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
20cc0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
20cd0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
20ce0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
20cf0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
20d00 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
20d10 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65  0;.#endif.  asse
20d20 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
20d30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
20d40 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
20d50 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
20d60 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
20d70 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
20d80 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  );.  res = 0;.  
20d90 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  iKey = pIn3->u.i
20da0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
20db0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
20dc0 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b  ked(pCrsr, 0, iK
20dd0 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
20de0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
20df0 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65   = iKey;  /* Use
20e00 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a  d by OP_Delete *
20e10 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  /.  pC->nullRow 
20e20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
20e30 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
20e40 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65  TALE;.  pC->defe
20e50 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
20e60 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
20e70 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70  n(res!=0,2);.  p
20e80 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
20e90 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d  res;.  if( res!=
20ea0 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
20eb0 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
20ec0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
20ed0 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  ence P1 P2 * * *
20ee0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
20ef0 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63  P2]=cursor[P1].c
20f00 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20  tr++.**.** Find 
20f10 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62  the next availab
20f20 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  le sequence numb
20f30 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  er for cursor P1
20f40 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73  ..** Write the s
20f50 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69  equence number i
20f60 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
20f70 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65  .** The sequence
20f80 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63   number on the c
20f90 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65  ursor is increme
20fa0 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a  nted after this.
20fb0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
20fc0 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71   .*/.case OP_Seq
20fd0 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  uence: {        
20fe0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
20ff0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
21000 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
21010 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
21020 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
21030 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
21040 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
21050 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
21060 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
21070 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
21080 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72  seqCount++;.  br
21090 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
210a0 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20  de: NewRowid P1 
210b0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
210c0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
210d0 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e  id.**.** Get a n
210e0 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  ew integer recor
210f0 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20  d number (a.k.a 
21100 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73  "rowid") used as
21110 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61   the key to a ta
21120 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f  ble..** The reco
21130 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74  rd number is not
21140 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
21150 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65   as a key in the
21160 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62   database.** tab
21170 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  le that cursor P
21180 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68  1 points to.  Th
21190 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  e new record num
211a0 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a  ber is written.*
211b0 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67  * written to reg
211c0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
211d0 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20  If P3>0 then P3 
211e0 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
211f0 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
21200 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61  of this VDBE tha
21210 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20  t holds .** the 
21220 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73  largest previous
21230 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ly generated rec
21240 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e  ord number. No n
21250 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
21260 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64  s are.** allowed
21270 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
21280 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65   this value. Whe
21290 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61  n this value rea
212a0 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d  ches its maximum
212b0 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f  , .** an SQLITE_
212c0 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65  FULL error is ge
212d0 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20  nerated. The P3 
212e0 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61  register is upda
212f0 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a  ted with the '.*
21300 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  * generated reco
21310 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20  rd number. This 
21320 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20  P3 mechanism is 
21330 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
21340 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55  lement the.** AU
21350 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74  TOINCREMENT feat
21360 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
21370 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  NewRowid: {     
21380 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
21390 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20  .  i64 v;       
213a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
213b0 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
213c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
213d0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
213e0 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74   of table to get
213f0 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   the new rowid *
21400 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
21410 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
21420 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74  sult of an sqlit
21430 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f  e3BtreeLast() */
21440 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20  .  int cnt;     
21450 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
21460 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68  nter to limit th
21470 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72  e number of sear
21480 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ches */.  Mem *p
21490 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
214a0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
214b0 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77  ding largest row
214c0 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45  id for AUTOINCRE
214d0 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72  MENT */.  VdbeFr
214e0 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
214f0 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f   /* Root frame o
21500 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d  f VDBE */..  v =
21510 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   0;.  res = 0;. 
21520 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
21530 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
21540 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21550 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
21560 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
21570 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
21580 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
21590 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
215a0 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75 72 73   NEVER(pC->pCurs
215b0 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a  or==0) ){.    /*
215c0 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69 61   The zero initia
215d0 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20 69  lization above i
215e0 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e 65  s all that is ne
215f0 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  eded */.  }else{
21600 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
21610 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64   rowid or record
21620 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65   number (differe
21630 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65  nt terms for the
21640 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69   same.    ** thi
21650 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ng) is obtained 
21660 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c  in a two-step al
21670 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a  gorithm..    **.
21680 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20      ** First we 
21690 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
216a0 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
216b0 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61  ting rowid and a
216c0 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f  dd one.    ** to
216d0 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74   that.  But if t
216e0 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
216f0 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72  ing rowid is alr
21700 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d  eady the maximum
21710 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65  .    ** positive
21720 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76   integer, we hav
21730 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67  e to fall throug
21740 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a  h to the second.
21750 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69      ** probabili
21760 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20  stic algorithm. 
21770 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65     **.    ** The
21780 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68   second algorith
21790 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61  m is to select a
217a0 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d   rowid at random
217b0 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20   and see if.    
217c0 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78  ** it already ex
217d0 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ists in the tabl
217e0 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  e.  If it does n
217f0 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76  ot exist, we hav
21800 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64  e.    ** succeed
21810 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64  ed.  If the rand
21820 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78  om rowid does ex
21830 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61  ist, we select a
21840 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   new one.    ** 
21850 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75  and try again, u
21860 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a  p to 100 times..
21870 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72      */.    asser
21880 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
21890 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
218a0 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
218b0 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
218c0 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
218d0 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
218e0 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
218f0 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
21900 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
21910 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
21920 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
21930 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
21940 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
21950 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
21960 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
21970 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
21980 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
21990 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
219a0 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
219b0 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
219c0 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
219d0 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37  i64)( (((u64)0x7
219e0 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20  fffffff)<<32) | 
219f0 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20  (u64)0xffffffff 
21a00 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66  ).#endif..    if
21a10 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  ( !pC->useRandom
21a20 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72  Rowid ){.      r
21a30 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21a40 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Last(pC->pCursor
21a50 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
21a60 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
21a70 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
21a80 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
21a90 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
21aa0 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
21ab0 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f        v = 1;   /
21ac0 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34  * IMP: R-61914-4
21ad0 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65  8074 */.      }e
21ae0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73  lse{.        ass
21af0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
21b00 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
21b10 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20  C->pCursor) );. 
21b20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
21b30 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
21b40 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29  pC->pCursor, &v)
21b50 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
21b60 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21b70 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66  );   /* Cannot f
21b80 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74  ail following Bt
21b90 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20  reeLast() */.   
21ba0 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f       if( v>=MAX_
21bb0 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20  ROWID ){.       
21bc0 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d     pC->useRandom
21bd0 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Rowid = 1;.     
21be0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
21bf0 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d      v++;   /* IM
21c00 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37  P: R-29538-34987
21c10 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   */.        }.  
21c20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66      }.    }..#if
21c30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21c40 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
21c50 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29     if( pOp->p3 )
21c60 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72  {.      /* Asser
21c70 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
21c80 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
21c90 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  . */.      asser
21ca0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
21cb0 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72        if( p->pFr
21cc0 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 66  ame ){.        f
21cd0 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
21ce0 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
21cf0 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
21d00 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
21d10 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
21d20 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
21d30 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
21d40 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
21d50 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72  rt( pOp->p3<=pFr
21d60 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  ame->nMem );.   
21d70 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72       pMem = &pFr
21d80 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
21d90 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  3];.      }else{
21da0 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
21db0 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
21dc0 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
21dd0 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
21de0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
21df0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
21e00 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  or) );.        p
21e10 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
21e20 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  >p3];.        me
21e30 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
21e40 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d  , pMem);.      }
21e50 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
21e60 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
21e70 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54  );..      REGIST
21e80 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
21e90 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73  , pMem);.      s
21ea0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
21eb0 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20  egerify(pMem);. 
21ec0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d       assert( (pM
21ed0 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
21ee0 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d  Int)!=0 );  /* m
21ef0 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20  em(P3) holds an 
21f00 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20  integer */.     
21f10 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
21f20 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
21f30 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
21f40 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
21f50 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
21f60 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36  * IMP: R-12275-6
21f70 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20 20 20  1338 */.        
21f80 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
21f90 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
21fa0 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65  .      if( v<pMe
21fb0 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
21fc0 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e      v = pMem->u.
21fd0 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  i + 1;.      }. 
21fe0 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d       pMem->u.i =
21ff0 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66   v;.    }.#endif
22000 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65  .    if( pC->use
22010 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
22020 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e       /* IMPLEMEN
22030 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36  TATION-OF: R-076
22040 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20  77-41881 If the 
22050 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73  largest ROWID is
22060 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20   equal to the.  
22070 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70      ** largest p
22080 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20  ossible integer 
22090 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  (922337203685477
220a0 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64  5807) then the d
220b0 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a  atabase.      **
220c0 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70   engine starts p
220d0 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20  icking positive 
220e0 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73  candidate ROWIDs
220f0 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c   at random until
22100 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e  .      ** it fin
22110 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e  ds one that is n
22120 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
22130 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ed. */.      ass
22140 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20  ert( pOp->p3==0 
22150 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74  );  /* We cannot
22160 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f   be in random ro
22170 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73  wid mode if this
22180 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
22190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221a0 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   ** an AUTOINCRE
221b0 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  MENT table. */. 
221c0 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20       cnt = 0;.  
221d0 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
221e0 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65  sqlite3_randomne
221f0 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76  ss(sizeof(v), &v
22200 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20  );.        v &= 
22210 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20  (MAX_ROWID>>1); 
22220 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20  v++;  /* Ensure 
22230 74 68 61 74 20 76 20 69 73 20 67 72 65 61 74 65  that v is greate
22240 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20  r than zero */. 
22250 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28       }while(  ((
22260 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
22270 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
22280 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
22290 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20  (u64)v,.        
222a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222c0 20 20 20 20 20 20 20 20 20 30 2c 20 26 72 65 73           0, &res
222d0 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20  ))==SQLITE_OK). 
222e0 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 72             && (r
222f0 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20  es==0).         
22300 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30     && (++cnt<100
22310 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  ));.      if( rc
22320 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
22330 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
22340 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
22350 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  L;   /* IMP: R-3
22360 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20  8219-53002 */.  
22370 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
22380 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
22390 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
223a0 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20  ert( v>0 );  /* 
223b0 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37  EV: R-40812-0357
223c0 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 */.    }.    p
223d0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
223e0 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
223f0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
22400 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
22410 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
22420 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
22430 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20  code: Insert P1 
22440 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
22450 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
22460 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d  r[P3] data=r[P2]
22470 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20  .**.** Write an 
22480 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74  entry into the t
22490 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50  able of cursor P
224a0 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20  1.  A new entry 
224b0 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66  is.** created if
224c0 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65   it doesn't alre
224d0 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65  ady exist or the
224e0 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69   data for an exi
224f0 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69  sting.** entry i
22500 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20  s overwritten.  
22510 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20  The data is the 
22520 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73  value MEM_Blob s
22530 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
22540 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20  r.** number P2. 
22550 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65  The key is store
22560 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
22570 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a  . The key must.*
22580 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a  * be a MEM_Int..
22590 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
225a0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
225b0 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
225c0 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e  hen the row chan
225d0 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69  ge count is.** i
225e0 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
225f0 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20  rwise not).  If 
22600 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  the OPFLAG_LASTR
22610 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20  OWID flag of P5 
22620 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20  is set,.** then 
22630 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20  rowid is stored 
22640 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72  for subsequent r
22650 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20  eturn by the.** 
22660 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
22670 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63  ert_rowid() func
22680 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20  tion (otherwise 
22690 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64  it is unmodified
226a0 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  )..**.** If the 
226b0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
226c0 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20  SULT flag of P5 
226d0 69 73 20 73 65 74 20 61 6e 64 20 69 66 20 74 68  is set and if th
226e0 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74  e result of.** t
226f0 68 65 20 6c 61 73 74 20 73 65 65 6b 20 6f 70 65  he last seek ope
22700 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78  ration (OP_NotEx
22710 69 73 74 73 29 20 77 61 73 20 61 20 73 75 63 63  ists) was a succ
22720 65 73 73 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a  ess, then this.*
22730 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c  * operation will
22740 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20   not attempt to 
22750 66 69 6e 64 20 74 68 65 20 61 70 70 72 6f 70 72  find the appropr
22760 69 61 74 65 20 72 6f 77 20 62 65 66 6f 72 65 20  iate row before 
22770 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73  doing.** the ins
22780 65 72 74 20 62 75 74 20 77 69 6c 6c 20 69 6e 73  ert but will ins
22790 74 65 61 64 20 6f 76 65 72 77 72 69 74 65 20 74  tead overwrite t
227a0 68 65 20 72 6f 77 20 74 68 61 74 20 74 68 65 20  he row that the 
227b0 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72  cursor is.** cur
227c0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
227d0 74 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c 79 2c  to.  Presumably,
227e0 20 74 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f   the prior OP_No
227f0 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a  tExists opcode.*
22800 2a 20 68 61 73 20 61 6c 72 65 61 64 79 20 70 6f  * has already po
22810 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72  sitioned the cur
22820 73 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e 20 20  sor correctly.  
22830 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d  This is an optim
22840 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20  ization.** that 
22850 62 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d 61 6e  boosts performan
22860 63 65 20 62 79 20 61 76 6f 69 64 69 6e 67 20 72  ce by avoiding r
22870 65 64 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a  edundant seeks..
22880 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
22890 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61  LAG_ISUPDATE fla
228a0 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  g is set, then t
228b0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61  his opcode is pa
228c0 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41  rt of an.** UPDA
228d0 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f  TE operation.  O
228e0 74 68 65 72 77 69 73 65 20 28 69 66 20 74 68 65  therwise (if the
228f0 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20   flag is clear) 
22900 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
22910 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61  .** is part of a
22920 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69  n INSERT operati
22930 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72 65  on.  The differe
22940 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f  nce is only impo
22950 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20  rtant to.** the 
22960 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a  update hook..**.
22970 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20  ** Parameter P4 
22980 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73  may point to a s
22990 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
229a0 20 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c   the table-name,
229b0 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55   or.** may be NU
229c0 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74  LL. If it is not
229d0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20   NULL, then the 
229e0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20  update-hook .** 
229f0 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65  (sqlite3.xUpdate
22a00 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76  Callback) is inv
22a10 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  oked following a
22a20 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65   successful inse
22a30 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49  rt..**.** (WARNI
22a40 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69  NG/TODO: If P1 i
22a50 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  s a pseudo-curso
22a60 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61  r and P2 is dyna
22a70 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  mically.** alloc
22a80 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72  ated, then owner
22a90 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72  ship of P2 is tr
22aa0 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65  ansferred to the
22ab0 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a   pseudo-cursor.*
22ac0 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50  * and register P
22ad0 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65  2 becomes epheme
22ae0 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72  ral.  If the cur
22af0 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20  sor is changed, 
22b00 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  the.** value of 
22b10 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c  register P2 will
22b20 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d   then change.  M
22b30 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f  ake sure this do
22b40 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20  es not.** cause 
22b50 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a  any problems.).*
22b60 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
22b70 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
22b80 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65   on tables.  The
22b90 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
22ba0 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69  ruction.** for i
22bb0 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78  ndices is OP_Idx
22bc0 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  Insert..*/./* Op
22bd0 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20  code: InsertInt 
22be0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
22bf0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74  * Synopsis:  int
22c00 6b 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50 32  key=P3 data=r[P2
22c10 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  ].**.** This wor
22c20 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20  ks exactly like 
22c30 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74  OP_Insert except
22c40 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 69 73   that the key is
22c50 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
22c60 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68  value P3, not th
22c70 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69  e value of the i
22c80 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e  nteger stored in
22c90 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f   register P3..*/
22ca0 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a  .case OP_Insert:
22cb0 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74   .case OP_Insert
22cc0 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44  Int: {.  Mem *pD
22cd0 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45  ata;       /* ME
22ce0 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64  M cell holding d
22cf0 61 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ata for the reco
22d00 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  rd to be inserte
22d10 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79  d */.  Mem *pKey
22d20 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  ;        /* MEM 
22d30 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79  cell holding key
22d40 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64    for the record
22d50 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20   */.  i64 iKey; 
22d60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69          /* The i
22d70 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20  nteger ROWID or 
22d80 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f  key for the reco
22d90 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  rd to be inserte
22da0 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
22db0 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73  r *pC;   /* Curs
22dc0 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f  or to table into
22dd0 20 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73   which insert is
22de0 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
22df0 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20  t nZero;        
22e00 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
22e10 6f 2d 62 79 74 65 73 20 74 6f 20 61 70 70 65 6e  o-bytes to appen
22e20 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52  d */.  int seekR
22e30 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75  esult;   /* Resu
22e40 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b  lt of prior seek
22e50 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53   or 0 if no USES
22e60 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a  EEKRESULT flag *
22e70 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
22e80 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73  zDb;  /* databas
22e90 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79  e name - used by
22ea0 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
22eb0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
22ec0 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65   *zTbl; /* Table
22ed0 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20   name - used by 
22ee0 74 68 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20  the opdate hook 
22ef0 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20  */.  int op;    
22f00 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65         /* Opcode
22f10 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b   for update hook
22f20 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  : SQLITE_UPDATE 
22f30 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  or SQLITE_INSERT
22f40 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26   */..  pData = &
22f50 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
22f60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22f70 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
22f80 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
22f90 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
22fa0 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43  d(pData) );.  pC
22fb0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
22fc0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
22fd0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
22fe0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
22ff0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23000 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
23010 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
23020 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
23030 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
23040 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61  E(pOp->p2, pData
23050 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  );..  if( pOp->o
23060 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
23070 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26   ){.    pKey = &
23080 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
23090 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d     assert( pKey-
230a0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
230b0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
230c0 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29  memIsValid(pKey)
230d0 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
230e0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
230f0 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20  pKey);.    iKey 
23100 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d  = pKey->u.i;.  }
23110 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
23120 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
23130 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20  P_InsertInt );. 
23140 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70     iKey = pOp->p
23150 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f  3;.  }..  if( pO
23160 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p5 & OPFLAG_N
23170 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
23180 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70  nge++;.  if( pOp
23190 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41  ->p5 & OPFLAG_LA
231a0 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61  STROWID ) db->la
231b0 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
231c0 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66  wid = iKey;.  if
231d0 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
231e0 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
231f0 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20   pData->z = 0;. 
23200 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b     pData->n = 0;
23210 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
23220 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61  sert( pData->fla
23230 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
23240 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20  EM_Str) );.  }. 
23250 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28   seekResult = ((
23260 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
23270 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20  _USESEEKRESULT) 
23280 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  ? pC->seekResult
23290 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61   : 0);.  if( pDa
232a0 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
232b0 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72  Zero ){.    nZer
232c0 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65  o = pData->u.nZe
232d0 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ro;.  }else{.   
232e0 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a   nZero = 0;.  }.
232f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
23300 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43  reeInsert(pC->pC
23310 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a  ursor, 0, iKey,.
23320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23330 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61 2d            pData-
23340 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a  >z, pData->n, nZ
23350 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ero,.           
23360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
23370 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
23380 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73 65 65  _APPEND)!=0, see
23390 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70  kResult.  );.  p
233a0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
233b0 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
233c0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
233d0 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
233e0 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
233f0 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
23400 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53  . */.  if( rc==S
23410 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
23420 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
23430 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
23440 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44      zDb = db->aD
23450 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
23460 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70  ;.    zTbl = pOp
23470 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d  ->p4.z;.    op =
23480 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
23490 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20  LAG_ISUPDATE) ? 
234a0 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20  SQLITE_UPDATE : 
234b0 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a  SQLITE_INSERT);.
234c0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
234d0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64  isTable );.    d
234e0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
234f0 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
23500 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c  g, op, zDb, zTbl
23510 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73  , iKey);.    ass
23520 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
23530 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
23540 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
23550 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20  lete P1 P2 * P4 
23560 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74  *.**.** Delete t
23570 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69  he record at whi
23580 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  ch the P1 cursor
23590 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
235a0 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  inting..**.** Th
235b0 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
235c0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
235d0 74 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78  t either the nex
235e0 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
235f0 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
23600 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
23610 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
23620 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
23630 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
23640 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
23650 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
23660 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69   no-op.  Hence i
23670 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74  t is OK to delet
23680 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72  e.** a record fr
23690 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e 65 78 74  om within a Next
236a0 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   loop..**.** If 
236b0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
236c0 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73  GE flag of P2 is
236d0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
236e0 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
236f0 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
23700 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
23710 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74  )..**.** P1 must
23720 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74   not be pseudo-t
23730 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f  able.  It has to
23740 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65   be a real table
23750 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c   with.** multipl
23760 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  e rows..**.** If
23770 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
23780 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20   then it is the 
23790 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
237a0 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20  e that P1 is.** 
237b0 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68  pointing to.  Th
237c0 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69  e update hook wi
237d0 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69  ll be invoked, i
237e0 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20  f it exists..** 
237f0 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
23800 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75  L then the P1 cu
23810 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
23820 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a  een positioned.*
23830 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f  * using OP_NotFo
23840 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76  und prior to inv
23850 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  oking this opcod
23860 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  e..*/.case OP_De
23870 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  lete: {.  VdbeCu
23880 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
23890 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
238a0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
238b0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
238c0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
238d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
238e0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
238f0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
23900 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64  ;  /* Only valid
23910 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73   for real tables
23920 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65  , no pseudotable
23930 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  s */.  assert( p
23940 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
23950 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20  o==0 );..#ifdef 
23960 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 2f  SQLITE_DEBUG.  /
23970 2a 20 54 68 65 20 73 65 65 6b 20 6f 70 65 72 61  * The seek opera
23980 74 69 6f 6e 20 74 68 61 74 20 70 6f 73 69 74 69  tion that positi
23990 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20  oned the cursor 
239a0 70 72 69 6f 72 20 74 6f 20 4f 50 5f 44 65 6c 65  prior to OP_Dele
239b0 74 65 20 77 69 6c 6c 0a 20 20 2a 2a 20 68 61 76  te will.  ** hav
239c0 65 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 70  e also set the p
239d0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
239e0 66 69 65 6c 64 20 74 6f 20 74 68 65 20 72 6f 77  field to the row
239f0 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 74 68  id of the row th
23a00 61 74 0a 20 20 2a 2a 20 69 73 20 62 65 69 6e 67  at.  ** is being
23a10 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 69 66   deleted */.  if
23a20 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70  ( pOp->p4.z && p
23a30 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
23a40 20 20 69 36 34 20 69 4b 65 79 20 3d 20 30 3b 0a    i64 iKey = 0;.
23a50 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
23a60 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72  KeySize(pC->pCur
23a70 73 6f 72 2c 20 26 69 4b 65 79 29 3b 0a 20 20 20  sor, &iKey);.   
23a80 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76   assert( pC->mov
23a90 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79 20  etoTarget==iKey 
23aa0 29 3b 20 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ); .  }.#endif. 
23ab0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
23ac0 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70  treeDelete(pC->p
23ad0 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63  Cursor);.  pC->c
23ae0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
23af0 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
23b00 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
23b10 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
23b20 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
23b30 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
23b40 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
23b50 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 26  k && pOp->p4.z &
23b60 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  & pC->isTable ){
23b70 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
23b80 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
23b90 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
23ba0 44 45 4c 45 54 45 2c 0a 20 20 20 20 20 20 20 20  DELETE,.        
23bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bc0 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d  db->aDb[pC->iDb]
23bd0 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d 3e 70 34 2e  .zName, pOp->p4.
23be0 7a 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72  z, pC->movetoTar
23bf0 67 65 74 29 3b 0a 20 20 20 20 61 73 73 65 72 74  get);.    assert
23c00 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
23c10 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
23c20 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  2 & OPFLAG_NCHAN
23c30 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
23c40 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a  +;.  break;.}./*
23c50 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f   Opcode: ResetCo
23c60 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  unt * * * * *.**
23c70 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
23c80 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
23c90 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f  ter is copied to
23ca0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
23cb0 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63  ndle.** change c
23cc0 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64  ounter (returned
23cd0 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63   by subsequent c
23ce0 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f  alls to sqlite3_
23cf0 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54  changes())..** T
23d00 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65  hen the VMs inte
23d10 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e  rnal change coun
23d20 74 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e  ter resets to 0.
23d30 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64  .** This is used
23d40 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
23d50 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rams..*/.case OP
23d60 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20  _ResetCount: {. 
23d70 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
23d80 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
23d90 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68  hange);.  p->nCh
23da0 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61  ange = 0;.  brea
23db0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
23dc0 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50   SorterCompare P
23dd0 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79  1 P2 P3 P4.** Sy
23de0 6e 6f 70 73 69 73 3a 20 20 69 66 20 6b 65 79 28  nopsis:  if key(
23df0 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c  P1)!=trim(r[P3],
23e00 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P4) goto P2.**.*
23e10 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72  * P1 is a sorter
23e20 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69 6e   cursor. This in
23e30 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72  struction compar
23e40 65 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  es a prefix of t
23e50 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f  he.** record blo
23e60 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  b in register P3
23e70 20 61 67 61 69 6e 73 74 20 61 20 70 72 65 66 69   against a prefi
23e80 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74  x of the entry t
23e90 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74  hat .** the sort
23ea0 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e  er cursor curren
23eb0 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20  tly points to.  
23ec0 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 50  Only the first P
23ed0 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72  4 fields.** of r
23ee0 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73 6f 72  [P3] and the sor
23ef0 74 65 72 20 72 65 63 6f 72 64 20 61 72 65 20 63  ter record are c
23f00 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  ompared..**.** I
23f10 66 20 65 69 74 68 65 72 20 50 33 20 6f 72 20 74  f either P3 or t
23f20 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61 69  he sorter contai
23f30 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65  ns a NULL in one
23f40 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69 66   of their signif
23f50 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20  icant.** fields 
23f60 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74 68  (not counting th
23f70 65 20 50 34 20 66 69 65 6c 64 73 20 61 74 20 74  e P4 fields at t
23f80 68 65 20 65 6e 64 20 77 68 69 63 68 20 61 72 65  he end which are
23f90 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a   ignored) then.*
23fa0 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
23fb0 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62   is assumed to b
23fc0 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46  e equal..**.** F
23fd0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 6e  all through to n
23fe0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
23ff0 69 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72  if the two recor
24000 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  ds compare equal
24010 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65   to.** each othe
24020 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  r.  Jump to P2 i
24030 66 20 74 68 65 79 20 61 72 65 20 64 69 66 66 65  f they are diffe
24040 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rent..*/.case OP
24050 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20  _SorterCompare: 
24060 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
24070 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
24080 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20   int nKeyCol;.. 
24090 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
240a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
240b0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
240c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
240d0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
240e0 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26  32 );.  pIn3 = &
240f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
24100 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e   nKeyCol = pOp->
24110 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b  p4.i;.  res = 0;
24120 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
24130 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  dbeSorterCompare
24140 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43  (pC, pIn3, nKeyC
24150 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56 64 62  ol, &res);.  Vdb
24160 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
24170 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
24180 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
24190 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  _p2;.  break;.};
241a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
241b0 74 65 72 44 61 74 61 20 50 31 20 50 32 20 50 33  terData P1 P2 P3
241c0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
241d0 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
241e0 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
241f0 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 75  gister P2 the cu
24200 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74  rrent sorter dat
24210 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72  a for sorter cur
24220 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20  sor P1..** Then 
24230 63 6c 65 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e  clear the column
24240 20 68 65 61 64 65 72 20 63 61 63 68 65 20 6f 6e   header cache on
24250 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a   cursor P3..**.*
24260 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
24270 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f   normally use to
24280 20 6d 6f 76 65 20 61 20 72 65 63 6f 72 64 20 6f   move a record o
24290 75 74 20 6f 66 20 74 68 65 20 73 6f 72 74 65 72  ut of the sorter
242a0 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72   and into.** a r
242b0 65 67 69 73 74 65 72 20 74 68 61 74 20 69 73 20  egister that is 
242c0 74 68 65 20 73 6f 75 72 63 65 20 66 6f 72 20 61  the source for a
242d0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
242e0 72 73 6f 72 20 63 72 65 61 74 65 64 20 75 73 69  rsor created usi
242f0 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f  ng.** OpenPseudo
24300 2e 20 20 54 68 61 74 20 70 73 65 75 64 6f 2d 74  .  That pseudo-t
24310 61 62 6c 65 20 63 75 72 73 6f 72 20 69 73 20 74  able cursor is t
24320 68 65 20 6f 6e 65 20 74 68 61 74 20 69 73 20 69  he one that is i
24330 64 65 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a 20  dentified by.** 
24340 70 61 72 61 6d 65 74 65 72 20 50 33 2e 20 20 43  parameter P3.  C
24350 6c 65 61 72 69 6e 67 20 74 68 65 20 50 33 20 63  learing the P3 c
24360 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61 73 20 70  olumn cache as p
24370 61 72 74 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  art of this opco
24380 64 65 20 73 61 76 65 73 0a 2a 2a 20 75 73 20 66  de saves.** us f
24390 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20 69 73  rom having to is
243a0 73 75 65 20 61 20 73 65 70 61 72 61 74 65 20 4e  sue a separate N
243b0 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63 74 69  ullRow instructi
243c0 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74 68 61 74  on to clear that
243d0 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20   cache..*/.case 
243e0 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b  OP_SorterData: {
243f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
24400 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  C;..  pOut = &aM
24410 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
24420 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
24430 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
24440 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
24450 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
24460 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28  dbeSorterRowkey(
24470 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73  pC, pOut);.  ass
24480 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f  ert( rc!=SQLITE_
24490 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61  OK || (pOut->fla
244a0 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29  gs & MEM_Blob) )
244b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
244c0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
244d0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
244e0 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
244f0 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75 73  p3]->cacheStatus
24500 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
24510 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
24520 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50  pcode: RowData P
24530 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
24540 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61  nopsis: r[P2]=da
24550 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ta.**.** Write i
24560 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
24570 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
24580 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72   data for cursor
24590 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
245a0 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
245b0 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
245c0 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20   .** It is just 
245d0 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
245e0 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
245f0 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
24600 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
24610 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
24620 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
24630 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
24640 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
24650 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
24660 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
24670 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
24680 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
24690 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65  /* Opcode: RowKe
246a0 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
246b0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
246c0 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  =key.**.** Write
246d0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
246e0 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
246f0 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f  ow key for curso
24700 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
24710 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
24720 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
24730 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73    .** The key is
24740 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
24750 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
24760 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
24770 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
24780 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
24790 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
247a0 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
247b0 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
247c0 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
247d0 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
247e0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
247f0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
24800 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a  .case OP_RowKey:
24810 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61  .case OP_RowData
24820 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
24830 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
24840 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e   *pCrsr;.  u32 n
24850 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20  ;.  i64 n64;..  
24860 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
24870 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p2];.  memAbou
24880 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
24890 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74  t);..  /* Note t
248a0 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52  hat RowKey and R
248b0 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c  owData are reall
248c0 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  y exactly the sa
248d0 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a  me instruction *
248e0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
248f0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
24900 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
24910 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24920 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24930 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
24940 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
24950 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20   pC->isTable || 
24960 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
24970 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
24980 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
24990 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ==0 || pOp->opco
249a0 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de==OP_RowData )
249b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
249c0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
249d0 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
249e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
249f0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
24a00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
24a10 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
24a20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
24a30 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65  ursor;..  /* The
24a40 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f   OP_RowKey and O
24a50 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65  P_RowData opcode
24a60 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20  s always follow 
24a70 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a  OP_NotExists or.
24a80 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f    ** OP_Rewind/O
24a90 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69  p_Next with no i
24aa0 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72  ntervening instr
24ab0 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  uctions that mig
24ac0 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20  ht invalidate.  
24ad0 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  ** the cursor.  
24ae0 49 66 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f  If this where no
24af0 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f  t the case, on o
24b00 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
24b10 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77  assert()s.  ** w
24b20 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75  ould fail.  Shou
24b30 6c 64 20 74 68 69 73 20 65 76 65 72 20 63 68 61  ld this ever cha
24b40 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f 66 20  nge (because of 
24b50 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63  changes in the c
24b60 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74  ode.  ** generat
24b70 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66 69 78  or) then the fix
24b80 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73   would be to ins
24b90 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20  ert a call to.  
24ba0 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  ** sqlite3VdbeCu
24bb0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20  rsorMoveto()..  
24bc0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  */.  assert( pC-
24bd0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
24be0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
24bf0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
24c00 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
24c10 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f   );.#if 0  /* No
24c20 74 20 72 65 71 75 69 72 65 64 20 64 75 65 20 74  t required due t
24c30 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  o the previous t
24c40 6f 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  o assert() state
24c50 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20  ments */.  rc = 
24c60 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
24c70 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
24c80 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
24c90 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
24ca0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
24cb0 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  if..  if( pC->is
24cc0 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
24cd0 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54  assert( !pC->isT
24ce0 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f  able );.    VVA_
24cf0 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
24d00 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
24d10 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20  Crsr, &n64);.   
24d20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
24d30 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20  ITE_OK );    /* 
24d40 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20  True because of 
24d50 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
24d60 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  all above */.   
24d70 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69   if( n64>db->aLi
24d80 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
24d90 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
24da0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
24db0 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75      }.    n = (u
24dc0 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b  32)n64;.  }else{
24dd0 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63  .    VVA_ONLY(rc
24de0 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
24df0 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
24e00 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  &n);.    assert(
24e10 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
24e20 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65  ;    /* DataSize
24e30 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a  () cannot fail *
24e40 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32  /.    if( n>(u32
24e50 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
24e60 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
24e70 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
24e80 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
24e90 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d  }.  testcase( n=
24ea0 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  =0 );.  if( sqli
24eb0 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
24ec0 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 4d  ndResize(pOut, M
24ed0 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a 20 20 20  AX(n,32)) ){.   
24ee0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
24ef0 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b  }.  pOut->n = n;
24f00 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
24f10 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pOut, MEM_Blob
24f20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54  );.  if( pC->isT
24f30 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72  able==0 ){.    r
24f40 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24f50 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  Key(pCrsr, 0, n,
24f60 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c   pOut->z);.  }el
24f70 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  se{.    rc = sql
24f80 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43  ite3BtreeData(pC
24f90 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
24fa0 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >z);.  }.  pOut-
24fb0 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
24fc0 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
24fd0 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
24fe0 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f   cast to text */
24ff0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
25000 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
25010 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
25020 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
25030 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
25040 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50  code: Rowid P1 P
25050 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
25060 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
25070 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20  .**.** Store in 
25080 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
25090 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
250a0 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74  the key of the t
250b0 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a  able entry that.
250c0 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  ** P1 is current
250d0 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a  ly point to..**.
250e0 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74  ** P1 can be eit
250f0 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  her an ordinary 
25100 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75  table or a virtu
25110 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65  al table.  There
25120 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61   used to.** be a
25130 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f   separate OP_VRo
25140 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75  wid opcode for u
25150 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20  se with virtual 
25160 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73  tables, but this
25170 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e  .** one opcode n
25180 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74  ow works for bot
25190 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a  h table types..*
251a0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a  /.case OP_Rowid:
251b0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
251c0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
251d0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
251e0 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
251f0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
25200 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
25210 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
25220 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
25230 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
25240 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
25250 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
25260 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
25270 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
25280 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
25290 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
252a0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
252b0 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c  doTableReg==0 ||
252c0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a   pC->nullRow );.
252d0 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
252e0 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  w ){.    pOut->f
252f0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
25300 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65  .    break;.  }e
25310 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65  lse if( pC->defe
25320 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20  rredMoveto ){.  
25330 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f    v = pC->moveto
25340 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20  Target;.#ifndef 
25350 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
25360 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65  UALTABLE.  }else
25370 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75   if( pC->pVtabCu
25380 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61  rsor ){.    pVta
25390 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72  b = pC->pVtabCur
253a0 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20  sor->pVtab;.    
253b0 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
253c0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73  >pModule;.    as
253d0 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
253e0 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20  Rowid );.    rc 
253f0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  = pModule->xRowi
25400 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  d(pC->pVtabCurso
25410 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69  r, &v);.    sqli
25420 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
25430 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 23  msg(p, pVtab);.#
25440 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
25450 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
25460 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  E */.  }else{.  
25470 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
25480 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
25490 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
254a0 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43  CursorRestore(pC
254b0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
254c0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
254d0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28  o_error;.    if(
254e0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
254f0 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
25500 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
25510 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
25520 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
25530 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
25540 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  ->pCursor, &v);.
25550 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
25560 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a  SQLITE_OK );  /*
25570 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75   Always so becau
25580 73 65 20 6f 66 20 43 75 72 73 6f 72 52 65 73 74  se of CursorRest
25590 6f 72 65 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20  ore() above */. 
255a0 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
255b0 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
255c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52  /* Opcode: NullR
255d0 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ow P1 * * * *.**
255e0 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72  .** Move the cur
255f0 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c  sor P1 to a null
25600 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f   row.  Any OP_Co
25610 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a  lumn operations.
25620 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68  ** that occur wh
25630 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69  ile the cursor i
25640 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f  s on the null ro
25650 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a  w will always.**
25660 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a   write a NULL..*
25670 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f  /.case OP_NullRo
25680 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  w: {.  VdbeCurso
25690 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
256a0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
256b0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
256c0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
256d0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
256e0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
256f0 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
25700 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 1;.  pC->cach
25710 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
25720 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d  STALE;.  if( pC-
25730 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20  >pCursor ){.    
25740 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
25750 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72  rCursor(pC->pCur
25760 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  sor);.  }.  brea
25770 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
25780 20 4c 61 73 74 20 50 31 20 50 32 20 50 33 20 2a   Last P1 P2 P3 *
25790 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
257a0 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
257b0 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
257c0 50 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e  Prev instruction
257d0 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
257e0 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61   refer to the la
257f0 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
25800 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
25810 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
25820 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
25830 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50  x is empty and P
25840 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  2>0, then jump i
25850 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
25860 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20  ..** If P2 is 0 
25870 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  or if the table 
25880 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
25890 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
258a0 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
258b0 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
258c0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
258d0 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
258e0 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
258f0 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
25900 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
25910 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
25920 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
25930 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
25940 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
25950 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
25960 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
25970 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20  t Next..*/.case 
25980 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Last: {      
25990 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
259a0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
259b0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
259c0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
259d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
259e0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
259f0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
25a00 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
25a10 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
25a20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
25a30 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
25a40 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73    res = 0;.  ass
25a50 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
25a60 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
25a70 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20  treeLast(pCrsr, 
25a80 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  &res);.  pC->nul
25a90 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
25aa0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
25ab0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
25ac0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
25ad0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
25ae0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f  >seekResult = pO
25af0 70 2d 3e 70 33 3b 0a 23 69 66 64 65 66 20 53 51  p->p3;.#ifdef SQ
25b00 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
25b10 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73  >seekOp = OP_Las
25b20 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  t;.#endif.  if( 
25b30 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20  pOp->p2>0 ){.   
25b40 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
25b50 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  (res!=0,2);.    
25b60 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
25b70 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
25b80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
25b90 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50  pcode: Sort P1 P
25ba0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
25bb0 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65  is opcode does e
25bc0 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
25bd0 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69  thing as OP_Rewi
25be0 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  nd except that.*
25bf0 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20  * it increments 
25c00 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  an undocumented 
25c10 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
25c20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
25c30 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20  ..**.** Sorting 
25c40 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20  is accomplished 
25c50 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72  by writing recor
25c60 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e  ds into a sortin
25c70 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e  g index,.** then
25c80 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20   rewinding that 
25c90 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e  index and playin
25ca0 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62  g it back from b
25cb0 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65  eginning to.** e
25cc0 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20  nd.  We use the 
25cd0 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69  OP_Sort opcode i
25ce0 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77  nstead of OP_Rew
25cf0 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a  ind to do the.**
25d00 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68   rewinding so th
25d10 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  at the global va
25d20 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69  riable will be i
25d30 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a  ncremented and.*
25d40 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  * regression tes
25d50 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  ts can determine
25d60 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
25d70 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  the optimizer is
25d80 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70  .** correctly op
25d90 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72  timizing out sor
25da0 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
25db0 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a  orterSort:    /*
25dc0 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
25dd0 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20  _Sort: {        
25de0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65  /* jump */.#ifde
25df0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
25e00 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
25e10 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt++;.  sqlite3_
25e20 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a  search_count--;.
25e30 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75  #endif.  p->aCou
25e40 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
25e50 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a  STATUS_SORT]++;.
25e60 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
25e70 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64  h into OP_Rewind
25e80 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a   */.}./* Opcode:
25e90 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20   Rewind P1 P2 * 
25ea0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
25eb0 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
25ec0 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
25ed0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
25ee0 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
25ef0 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
25f00 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
25f10 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
25f20 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
25f30 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
25f40 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75  dex is empty, ju
25f50 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
25f60 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20  o P2..** If the 
25f70 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
25f80 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
25f90 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
25fa0 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69   following .** i
25fb0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
25fc0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
25fd0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
25fe0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
25ff0 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
26000 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
26010 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72   beginning towar
26020 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
26030 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
26040 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
26050 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
26060 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
26070 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64  /.case OP_Rewind
26080 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
26090 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
260a0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
260b0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
260c0 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
260d0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
260e0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
260f0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
26100 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
26110 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
26120 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
26130 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e  rter(pC)==(pOp->
26140 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
26150 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20  rSort) );.  res 
26160 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 1;.#ifdef SQLI
26170 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
26180 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e  eekOp = OP_Rewin
26190 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  d;.#endif.  if( 
261a0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a  isSorter(pC) ){.
261b0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
261c0 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64  VdbeSorterRewind
261d0 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65  (pC, &res);.  }e
261e0 6c 73 65 7b 0a 20 20 20 20 70 43 72 73 72 20 3d  lse{.    pCrsr =
261f0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
26200 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
26210 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
26220 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
26230 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
26240 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
26250 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
26260 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
26270 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
26280 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
26290 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
262a0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
262b0 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
262c0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
262d0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
262e0 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
262f0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
26300 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26310 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33 20  : Next P1 P2 P3 
26320 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61  P4 P5.**.** Adva
26330 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f  nce cursor P1 so
26340 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
26350 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f  to the next key/
26360 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
26370 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
26380 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ex.  If there ar
26390 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61  e no more key/va
263a0 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
263b0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
263c0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
263d0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
263e0 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
263f0 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63  advance was succ
26400 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
26410 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
26420 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78  2..**.** The Nex
26430 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  t opcode is only
26440 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67   valid following
26450 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b   an SeekGT, Seek
26460 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77  GE, or.** OP_Rew
26470 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20  ind opcode used 
26480 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20  to position the 
26490 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73  cursor.  Next is
264a0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20   not allowed.** 
264b0 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54  to follow SeekLT
264c0 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f  , SeekLE, or OP_
264d0 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  Last..**.** The 
264e0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
264f0 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
26500 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
26510 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74  -table.  P1 must
26520 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70   have.** been op
26530 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  ened prior to th
26540 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65  is opcode or the
26550 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65   program will se
26560 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  gfault..**.** Th
26570 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
26580 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
26590 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
265a0 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
265b0 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
265c0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
265d0 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
265e0 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
265f0 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
26600 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
26610 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
26620 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
26630 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
26640 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
26650 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
26660 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
26670 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
26680 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
26690 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
266a0 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a  te3BtreeNext()..
266b0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
266c0 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
266d0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
266e0 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
266f0 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
26700 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
26710 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
26720 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
26730 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c   See also: Prev,
26740 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f   NextIfOpen.*/./
26750 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66  * Opcode: NextIf
26760 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34  Open P1 P2 P3 P4
26770 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P5.**.** This o
26780 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74  pcode works just
26790 20 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70   like Next excep
267a0 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72  t that if cursor
267b0 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70   P1 is not.** op
267c0 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20  en it behaves a 
267d0 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  no-op..*/./* Opc
267e0 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20  ode: Prev P1 P2 
267f0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
26800 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
26810 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
26820 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
26830 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
26840 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
26850 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
26860 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
26870 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
26880 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
26890 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
268a0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
268b0 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
268c0 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
268d0 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
268e0 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
268f0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
26900 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70  *.** The Prev op
26910 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
26920 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
26930 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
26940 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70  or.** OP_Last op
26950 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
26960 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
26970 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61  .  Prev is not a
26980 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
26990 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  low SeekGT, Seek
269a0 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64  GE, or OP_Rewind
269b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
269c0 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
269d0 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
269e0 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
269f0 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a  le.  If P1 is.**
26a00 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74   not open then t
26a10 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
26a20 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  ndefined..**.** 
26a30 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
26a40 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
26a50 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
26a60 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
26a70 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
26a80 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
26a90 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
26aa0 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
26ab0 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
26ac0 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
26ad0 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
26ae0 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
26af0 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
26b00 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
26b10 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
26b20 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
26b30 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
26b40 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
26b50 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
26b60 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
26b70 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  us()..**.** If P
26b80 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
26b90 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
26ba0 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
26bb0 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
26bc0 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
26bd0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
26be0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
26bf0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
26c00 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20  revIfOpen P1 P2 
26c10 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
26c20 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
26c30 20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20   just like Prev 
26c40 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63  except that if c
26c50 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a  ursor P1 is not.
26c60 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76  ** open it behav
26c70 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  es a no-op..*/.c
26c80 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78  ase OP_SorterNex
26c90 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  t: {  /* jump */
26ca0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
26cb0 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  C;.  int res;.. 
26cc0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
26cd0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
26ce0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
26cf0 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  );.  res = 0;.  
26d00 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
26d10 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70  SorterNext(db, p
26d20 43 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f  C, &res);.  goto
26d30 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65   next_tail;.case
26d40 20 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20   OP_PrevIfOpen: 
26d50 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
26d60 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  se OP_NextIfOpen
26d70 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  :    /* jump */.
26d80 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70    if( p->apCsr[p
26d90 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65  Op->p1]==0 ) bre
26da0 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ak;.  /* Fall th
26db0 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50  rough */.case OP
26dc0 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20  _Prev:          
26dd0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
26de0 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20  OP_Next:        
26df0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
26e00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
26e10 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
26e20 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
26e30 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72  ert( pOp->p5<Arr
26e40 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74  aySize(p->aCount
26e50 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  er) );.  pC = p-
26e60 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
26e70 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33  .  res = pOp->p3
26e80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
26e90 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
26ea0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
26eb0 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
26ec0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b  ( pC->pCursor );
26ed0 0a 20 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d  .  assert( res==
26ee0 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20  0 || (res==1 && 
26ef0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20  pC->isTable==0) 
26f00 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 72  );.  testcase( r
26f10 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  es==1 );.  asser
26f20 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
26f30 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
26f40 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
26f50 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
26f60 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26f70 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20  opcode!=OP_Prev 
26f80 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
26f90 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
26fa0 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61  ePrevious );.  a
26fb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
26fc0 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65  de!=OP_NextIfOpe
26fd0 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  n || pOp->p4.xAd
26fe0 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
26ff0 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
27000 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
27010 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20  !=OP_PrevIfOpen 
27020 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
27030 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
27040 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f  ePrevious);..  /
27050 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64  * The Next opcod
27060 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61  e is only used a
27070 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65  fter SeekGT, See
27080 6b 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e  kGE, and Rewind.
27090 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  .  ** The Prev o
270a0 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73  pcode is only us
270b0 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c  ed after SeekLT,
270c0 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73   SeekLE, and Las
270d0 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t. */.  assert( 
270e0 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
270f0 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Next || pOp->opc
27100 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70  ode!=OP_NextIfOp
27110 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
27120 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
27130 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  GT || pC->seekOp
27140 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20  ==OP_SeekGE.    
27150 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
27160 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70  ==OP_Rewind || p
27170 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f  C->seekOp==OP_Fo
27180 75 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20  und);.  assert( 
27190 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
271a0 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Prev || pOp->opc
271b0 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
271c0 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
271d0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
271e0 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  LT || pC->seekOp
271f0 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20  ==OP_SeekLE.    
27200 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
27210 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20  ==OP_Last );..  
27220 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64  rc = pOp->p4.xAd
27230 76 61 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f  vance(pC->pCurso
27240 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74  r, &res);.next_t
27250 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65  ail:.  pC->cache
27260 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
27270 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e  TALE;.  VdbeBran
27280 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32  chTaken(res==0,2
27290 29 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20  );.  if( res==0 
272a0 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  ){.    pC->nullR
272b0 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 61  ow = 0;.    p->a
272c0 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d  Counter[pOp->p5]
272d0 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ++;.#ifdef SQLIT
272e0 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74  E_TEST.    sqlit
272f0 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
27300 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 67 6f  +;.#endif.    go
27310 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  to jump_to_p2_an
27320 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
27330 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  rrupt;.  }else{.
27340 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
27350 3d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  = 1;.  }.  goto 
27360 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
27370 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  upt;.}../* Opcod
27380 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20  e: IdxInsert P1 
27390 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79  P2 P3 * P5.** Sy
273a0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
273b0 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ].**.** Register
273c0 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c   P2 holds an SQL
273d0 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
273e0 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b  using the.** Mak
273f0 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
27400 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f  ions.  This opco
27410 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b  de writes that k
27420 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69  ey.** into the i
27430 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66  ndex P1.  Data f
27440 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20  or the entry is 
27450 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  nil..**.** P3 is
27460 20 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f   a flag that pro
27470 76 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20  vides a hint to 
27480 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72  the b-tree layer
27490 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e   that this.** in
274a0 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74  sert is likely t
274b0 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a  o be an append..
274c0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
274d0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
274e0 47 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  GE bit set, then
274f0 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
27500 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  ter is.** increm
27510 65 6e 74 65 64 20 62 79 20 74 68 69 73 20 69 6e  ented by this in
27520 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74  struction.  If t
27530 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
27540 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a  E bit is clear,.
27550 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e  ** then the chan
27560 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e  ge counter is un
27570 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  changed..**.** I
27580 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
27590 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
275a0 54 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  T bit set, then 
275b0 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20  the cursor must 
275c0 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e  have.** just don
275d0 65 20 61 20 73 65 65 6b 20 74 6f 20 74 68 65 20  e a seek to the 
275e0 73 70 6f 74 20 77 68 65 72 65 20 74 68 65 20 6e  spot where the n
275f0 65 77 20 65 6e 74 72 79 20 69 73 20 74 6f 20 62  ew entry is to b
27600 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20 54  e inserted..** T
27610 68 69 73 20 66 6c 61 67 20 61 76 6f 69 64 73 20  his flag avoids 
27620 64 6f 69 6e 67 20 61 6e 20 65 78 74 72 61 20 73  doing an extra s
27630 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  eek..**.** This 
27640 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
27650 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63   works for indic
27660 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
27670 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
27680 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73  ** for tables is
27690 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63   OP_Insert..*/.c
276a0 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73  ase OP_SorterIns
276b0 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e  ert:       /* in
276c0 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  2 */.case OP_Idx
276d0 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20  Insert: {       
276e0 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
276f0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
27700 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
27710 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f    int nKey;.  co
27720 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a  nst char *zKey;.
27730 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27740 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27750 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
27760 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
27770 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
27780 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
27790 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
277a0 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  C)==(pOp->opcode
277b0 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
277c0 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  t) );.  pIn2 = &
277d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
277e0 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66   assert( pIn2->f
277f0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
27800 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
27810 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
27820 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
27830 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
27840 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72  hange++;.  asser
27850 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
27860 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
27870 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20  able==0 );.  rc 
27880 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
27890 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  2);.  if( rc==SQ
278a0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69  LITE_OK ){.    i
278b0 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
278c0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
278d0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57  lite3VdbeSorterW
278e0 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a  rite(pC, pIn2);.
278f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
27900 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b   nKey = pIn2->n;
27910 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49  .      zKey = pI
27920 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20  n2->z;.      rc 
27930 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
27940 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79  sert(pCrsr, zKey
27950 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30  , nKey, "", 0, 0
27960 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20  , pOp->p3, .    
27970 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20        ((pOp->p5 
27980 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
27990 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
279a0 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20  ekResult : 0).  
279b0 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20          );.     
279c0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
279d0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
279e0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68  ;.      pC->cach
279f0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
27a00 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d  STALE;.    }.  }
27a10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
27a20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74  Opcode: IdxDelet
27a30 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
27a40 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
27a50 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54  r[P2@P3].**.** T
27a60 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33  he content of P3
27a70 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74   registers start
27a80 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20  ing at register 
27a90 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e  P2 form.** an un
27aa0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
27ab0 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65  . This opcode re
27ac0 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79  moves that entry
27ad0 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e   from the .** in
27ae0 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75  dex opened by cu
27af0 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  rsor P1..*/.case
27b00 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b   OP_IdxDelete: {
27b10 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
27b20 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
27b30 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
27b40 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
27b50 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
27b60 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61  pOp->p3>0 );.  a
27b70 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
27b80 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d   && pOp->p2+pOp-
27b90 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
27ba0 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
27bb0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
27bc0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
27bd0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
27be0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
27bf0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
27c00 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
27c10 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
27c20 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
27c30 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
27c40 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
27c50 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
27c60 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e  ->pKeyInfo;.  r.
27c70 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
27c80 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75  p->p3;.  r.defau
27c90 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61  lt_rc = 0;.  r.a
27ca0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
27cb0 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p2];.#ifdef SQL
27cc0 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e  ITE_DEBUG.  { in
27cd0 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
27ce0 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
27cf0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
27d00 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
27d10 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d   }.#endif.  rc =
27d20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
27d30 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
27d40 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
27d50 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  s);.  if( rc==SQ
27d60 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
27d70 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
27d80 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
27d90 28 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20 20 61  (pCrsr);.  }.  a
27da0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
27db0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
27dc0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
27dd0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
27de0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
27df0 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64  Opcode: IdxRowid
27e00 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
27e10 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
27e20 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74  rowid.**.** Writ
27e30 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
27e40 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
27e50 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20  ich is the last 
27e60 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63  entry in the rec
27e70 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e  ord at.** the en
27e80 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
27e90 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  ey pointed to by
27ea0 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69   cursor P1.  Thi
27eb0 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64  s integer should
27ec0 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64   be.** the rowid
27ed0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
27ee0 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69  try to which thi
27ef0 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f  s index entry po
27f00 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ints..**.** See 
27f10 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b  also: Rowid, Mak
27f20 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65  eRecord..*/.case
27f30 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20   OP_IdxRowid: { 
27f40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
27f50 6f 75 74 32 20 2a 2f 0a 20 20 42 74 43 75 72 73  out2 */.  BtCurs
27f60 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62  or *pCrsr;.  Vdb
27f70 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
27f80 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 70 4f 75  64 rowid;..  pOu
27f90 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
27fa0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73  se(p, pOp);.  as
27fb0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
27fc0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
27fd0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
27fe0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
27ff0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
28000 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
28010 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
28020 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
28030 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
28040 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
28050 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
28060 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ble==0 );.  asse
28070 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
28080 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 20 20  Moveto==0 );..  
28090 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75 72  /* sqlite3VbeCur
280a0 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e  sorRestore() can
280b0 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68   only fail if th
280c0 65 20 72 65 63 6f 72 64 20 68 61 73 20 62 65 65  e record has bee
280d0 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f  n deleted.  ** o
280e0 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68  ut from under th
280f0 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20  e cursor.  That 
28100 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65  will never happe
28110 6e 64 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77  nd for an IdxRow
28120 69 64 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 2c 20  id.  ** opcode, 
28130 68 65 6e 63 65 20 74 68 65 20 4e 45 56 45 52 28  hence the NEVER(
28140 29 20 61 72 72 6f 75 6e 64 20 74 68 65 20 63 68  ) arround the ch
28150 65 63 6b 20 6f 66 20 74 68 65 20 72 65 74 75 72  eck of the retur
28160 6e 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20  n value..  */.  
28170 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
28180 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43  CursorRestore(pC
28190 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
281a0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20  c!=SQLITE_OK) ) 
281b0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
281c0 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20  o_error;..  if( 
281d0 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  !pC->nullRow ){.
281e0 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20      rowid = 0;  
281f0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
28200 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
28210 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
28220 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
28230 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28  te3VdbeIdxRowid(
28240 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69  db, pCrsr, &rowi
28250 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  d);.    if( rc!=
28260 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
28270 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
28280 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
28290 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  }.    pOut->u.i 
282a0 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 70 4f 75  = rowid;.    pOu
282b0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
282c0 6e 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  nt;.  }.  break;
282d0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
282e0 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34  dxGE P1 P2 P3 P4
282f0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
28300 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
28310 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
28320 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
28330 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
28340 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
28350 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
28360 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
28370 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65  RY KEY.  Compare
28380 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
28390 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
283a0 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
283b0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
283c0 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
283d0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
283e0 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69   or ROWID .** fi
283f0 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e  elds at the end.
28400 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
28410 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
28420 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
28430 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
28440 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
28450 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
28460 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
28470 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
28480 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
28490 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20  * Opcode: IdxGT 
284a0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
284b0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
284c0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
284d0 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
284e0 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
284f0 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
28500 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
28510 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
28520 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
28530 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
28540 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
28550 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
28560 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
28570 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
28580 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
28590 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
285a0 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
285b0 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
285c0 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
285d0 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
285e0 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
285f0 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
28600 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
28610 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
28620 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
28630 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
28640 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50   Opcode: IdxLT P
28650 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
28660 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
28670 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
28680 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
28690 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
286a0 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
286b0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
286c0 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
286d0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
286e0 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
286f0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
28700 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
28710 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
28720 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
28730 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
28740 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
28750 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
28760 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
28770 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
28780 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
28790 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
287a0 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
287b0 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72   to P2..** Other
287c0 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
287d0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
287e0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
287f0 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50   Opcode: IdxLE P
28800 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
28810 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
28820 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
28830 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
28840 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
28850 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
28860 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
28870 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
28880 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
28890 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
288a0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
288b0 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
288c0 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
288d0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
288e0 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
288f0 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
28900 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
28910 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
28920 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
28930 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
28940 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
28950 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
28960 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20  ue then jump.** 
28970 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  to P2. Otherwise
28980 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
28990 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
289a0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
289b0 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20  P_IdxLE:        
289c0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
289d0 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20  e OP_IdxGT:     
289e0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
289f0 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20  case OP_IdxLT:  
28a00 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
28a10 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
28a20 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  :  {       /* ju
28a30 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
28a40 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
28a50 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
28a60 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
28a70 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
28a80 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
28a90 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
28aa0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28ab0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
28ac0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
28ad0 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
28ae0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
28af0 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72  sor!=0);.  asser
28b00 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
28b10 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
28b20 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
28b30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29   || pOp->p5==1 )
28b40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28b50 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
28b60 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  2 );.  r.pKeyInf
28b70 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
28b80 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
28b90 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
28ba0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
28bb0 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20  <OP_IdxLT ){.   
28bc0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
28bd0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
28be0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
28bf0 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72  P_IdxGT );.    r
28c00 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
28c10 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
28c20 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
28c30 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20  de==OP_IdxGE || 
28c40 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
28c50 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64  IdxLT );.    r.d
28c60 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
28c70 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61   }.  r.aMem = &a
28c80 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
28c90 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
28ca0 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72  G.  { int i; for
28cb0 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
28cc0 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
28cd0 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
28ce0 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
28cf0 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a  f.  res = 0;  /*
28d00 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
28d10 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
28d20 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
28d30 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
28d40 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65  dbeIdxKeyCompare
28d50 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65  (db, pC, &r, &re
28d60 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f  s);.  assert( (O
28d70 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxLE&1)==(OP_
28d80 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f  IdxLT&1) && (OP_
28d90 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64  IdxGE&1)==(OP_Id
28da0 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20  xGT&1) );.  if( 
28db0 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d  (pOp->opcode&1)=
28dc0 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b  =(OP_IdxLT&1) ){
28dd0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
28de0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
28df0 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  LE || pOp->opcod
28e00 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20  e==OP_IdxLT );. 
28e10 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20     res = -res;. 
28e20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
28e30 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
28e40 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
28e50 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
28e60 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b  GT );.    res++;
28e70 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
28e80 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b  hTaken(res>0,2);
28e90 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29 20 67  .  if( res>0 ) g
28ea0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
28eb0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28ec0 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50  pcode: Destroy P
28ed0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
28ee0 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69  * Delete an enti
28ef0 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  re database tabl
28f00 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
28f10 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68   root page in th
28f20 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  e database.** fi
28f30 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
28f40 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  1..**.** The tab
28f50 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79  le being destroy
28f60 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ed is in the mai
28f70 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
28f80 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P3==0.  If.**
28f90 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P3==1 then the 
28fa0 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
28fb0 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
28fc0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
28fd0 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
28fe0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
28ff0 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
29000 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
29010 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
29020 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
29030 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20  enabled then it 
29040 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74  is possible that
29050 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61   another root pa
29060 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d  ge.** might be m
29070 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65  oved into the ne
29080 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74  wly deleted root
29090 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74   page in order t
290a0 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f  o keep all.** ro
290b0 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75  ot pages contigu
290c0 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69 6e  ous at the begin
290d0 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61  ning of the data
290e0 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65  base.  The forme
290f0 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68  r.** value of th
29100 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74  e root page that
29110 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c   moved - its val
29120 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f  ue before the mo
29130 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a  ve occurred -.**
29140 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
29150 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e  gister P2.  If n
29160 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d  o page .** movem
29170 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64  ent was required
29180 20 28 62 65 63 61 75 73 65 20 74 68 65 20 74 61   (because the ta
29190 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65  ble being droppe
291a0 64 20 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a  d was already .*
291b0 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69  * the last one i
291c0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20  n the database) 
291d0 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73  then a zero is s
291e0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
291f0 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f  r P2..** If AUTO
29200 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c  VACUUM is disabl
29210 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69  ed then a zero i
29220 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
29230 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  ster P2..**.** S
29240 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a  ee also: Clear.*
29250 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f  /.case OP_Destro
29260 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32  y: {     /* out2
29270 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64   */.  int iMoved
29280 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20  ;.  int iDb;..  
29290 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
292a0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 4f 75 74  nly==0 );.  pOut
292b0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
292c0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
292d0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
292e0 75 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e  ull;.  if( db->n
292f0 56 64 62 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e  VdbeRead > db->n
29300 56 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20  VDestroy+1 ){.  
29310 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f    rc = SQLITE_LO
29320 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72  CKED;.    p->err
29330 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62  orAction = OE_Ab
29340 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ort;.  }else{.  
29350 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b    iDb = pOp->p3;
29360 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d  .    assert( DbM
29370 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
29380 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20  Mask, iDb) );.  
29390 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f    iMoved = 0;  /
293a0 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
293b0 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  nly to silence a
293c0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
293d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
293e0 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e  eeDropTable(db->
293f0 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f  aDb[iDb].pBt, pO
29400 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b  p->p1, &iMoved);
29410 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
29420 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
29430 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76  pOut->u.i = iMov
29440 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ed;.#ifndef SQLI
29450 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
29460 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  UM.    if( rc==S
29470 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76  QLITE_OK && iMov
29480 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ed!=0 ){.      s
29490 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
294a0 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f  ved(db, iDb, iMo
294b0 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  ved, pOp->p1);. 
294c0 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44       /* All OP_D
294d0 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e  estroy operation
294e0 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73  s occur on the s
294f0 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20  ame btree */.   
29500 20 20 20 61 73 73 65 72 74 28 20 72 65 73 65 74     assert( reset
29510 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30  SchemaOnFault==0
29520 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f   || resetSchemaO
29530 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b  nFault==iDb+1 );
29540 0a 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65  .      resetSche
29550 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b  maOnFault = iDb+
29560 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  1;.    }.#endif.
29570 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
29580 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72  /* Opcode: Clear
29590 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
295a0 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65  Delete all conte
295b0 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  nts of the datab
295c0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
295d0 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
295e0 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74  ge.** in the dat
295f0 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69  abase file is gi
29600 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c  ven by P1.  But,
29610 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c   unlike Destroy,
29620 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76   do not.** remov
29630 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  e the table or i
29640 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61  ndex from the da
29650 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
29660 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
29670 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  ng clear is in t
29680 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
29690 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20   file if P2==0. 
296a0 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65   If.** P2==1 the
296b0 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
296c0 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
296d0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
296e0 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
296f0 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
29700 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
29710 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
29720 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
29730 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76  *.** If the P3 v
29740 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  alue is non-zero
29750 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
29760 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73   referred to mus
29770 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65  t be an.** intke
29780 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20  y table (an SQL 
29790 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e  table, not an in
297a0 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61  dex). In this ca
297b0 73 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  se the row chang
297c0 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69  e .** count is i
297d0 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
297e0 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
297f0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
29800 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a  ing cleared. .**
29810 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65   If P3 is greate
29820 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65  r than zero, the
29830 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  n the value stor
29840 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
29850 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63  3 is.** also inc
29860 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
29870 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
29880 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
29890 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a  g cleared..**.**
298a0 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72   See also: Destr
298b0 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  oy.*/.case OP_Cl
298c0 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68  ear: {.  int nCh
298d0 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67  ange;. .  nChang
298e0 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  e = 0;.  assert(
298f0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
29900 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
29910 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
29920 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29  Mask, pOp->p2) )
29930 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
29940 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28  BtreeClearTable(
29950 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70  .      db->aDb[p
29960 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70  Op->p2].pBt, pOp
29970 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f  ->p1, (pOp->p3 ?
29980 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20   &nChange : 0). 
29990 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
299a0 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61  3 ){.    p->nCha
299b0 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  nge += nChange;.
299c0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e      if( pOp->p3>
299d0 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
299e0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
299f0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
29a00 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
29a10 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d  oChange(p, &aMem
29a20 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
29a30 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e    aMem[pOp->p3].
29a40 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  u.i += nChange;.
29a50 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
29a60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
29a70 20 52 65 73 65 74 53 6f 72 74 65 72 20 50 31 20   ResetSorter P1 
29a80 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65  * * * *.**.** De
29a90 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
29aa0 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d  s from the ephem
29ab0 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f  eral table or so
29ac0 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20  rter.** that is 
29ad0 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50  open on cursor P
29ae0 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  1..**.** This op
29af0 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  code only works 
29b00 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65 64  for cursors used
29b10 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64   for sorting and
29b20 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20  .** opened with 
29b30 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
29b40 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65   or OP_SorterOpe
29b50 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
29b60 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56  setSorter: {.  V
29b70 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
29b80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29b90 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
29ba0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
29bb0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
29bc0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
29bd0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
29be0 28 20 70 43 2d 3e 70 53 6f 72 74 65 72 20 29 7b  ( pC->pSorter ){
29bf0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
29c00 53 6f 72 74 65 72 52 65 73 65 74 28 64 62 2c 20  SorterReset(db, 
29c10 70 43 2d 3e 70 53 6f 72 74 65 72 29 3b 0a 20 20  pC->pSorter);.  
29c20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
29c30 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72  t( pC->isEphemer
29c40 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  al );.    rc = s
29c50 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
29c60 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43  TableOfCursor(pC
29c70 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  ->pCursor);.  }.
29c80 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
29c90 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62  pcode: CreateTab
29ca0 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  le P1 P2 * * *.*
29cb0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
29cc0 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a  ]=root iDb=P1.**
29cd0 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
29ce0 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  ew table in the 
29cf0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
29d00 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
29d10 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
29d20 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
29d30 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
29d40 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
29d50 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
29d60 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
29d70 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
29d80 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
29d90 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
29da0 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66  2.**.** The diff
29db0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61  erence between a
29dc0 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e   table and an in
29dd0 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20  dex is this:  A 
29de0 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61  table must.** ha
29df0 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65  ve a 4-byte inte
29e00 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20  ger key and can 
29e10 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64  have arbitrary d
29e20 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a  ata.  An index.*
29e30 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61  * has an arbitra
29e40 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61  ry key but no da
29e50 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ta..**.** See al
29e60 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a  so: CreateIndex.
29e70 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72  */./* Opcode: Cr
29e80 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20  eateIndex P1 P2 
29e90 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
29ea0 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44  s: r[P2]=root iD
29eb0 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63  b=P1.**.** Alloc
29ec0 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20  ate a new index 
29ed0 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
29ee0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
29ef0 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
29f00 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
29f10 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
29f20 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
29f30 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
29f40 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
29f50 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
29f60 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
29f70 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
29f80 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
29f90 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
29fa0 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61  n on OP_CreateTa
29fb0 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ble for addition
29fc0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
29fd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
29fe0 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20  eIndex:         
29ff0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 63 61     /* out2 */.ca
2a000 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  se OP_CreateTabl
2a010 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  e: {          /*
2a020 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70   out2 */.  int p
2a030 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73  gno;.  int flags
2a040 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
2a050 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2a060 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
2a070 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73   pgno = 0;.  ass
2a080 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2a090 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2a0a0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2a0b0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2a0c0 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
2a0d0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
2a0e0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2a0f0 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
2a100 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
2a110 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
2a120 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
2a130 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74  opcode==OP_Creat
2a140 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  eTable ){.    /*
2a150 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
2a160 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c  NTKEY; */.    fl
2a170 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
2a180 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EY;.  }else{.   
2a190 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42   flags = BTREE_B
2a1a0 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63  LOBKEY;.  }.  rc
2a1b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
2a1c0 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e  reateTable(pDb->
2a1d0 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67  pBt, &pgno, flag
2a1e0 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  s);.  pOut->u.i 
2a1f0 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b  = pgno;.  break;
2a200 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
2a210 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20  arseSchema P1 * 
2a220 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  * P4 *.**.** Rea
2a230 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
2a240 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
2a250 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
2a260 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
2a270 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
2a280 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
2a290 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  se P4. .**.** Th
2a2a0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2a2b0 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  s the parser to 
2a2c0 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72  create a new vir
2a2d0 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a  tual machine,.**
2a2e0 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e   then runs the n
2a2f0 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
2a300 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20  ne.  It is thus 
2a310 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63  a re-entrant opc
2a320 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
2a330 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20  ParseSchema: {. 
2a340 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73   int iDb;.  cons
2a350 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
2a360 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
2a370 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61   InitData initDa
2a380 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72  ta;..  /* Any pr
2a390 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
2a3a0 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68   that invokes th
2a3b0 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68  is opcode will h
2a3c0 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a  old mutexes.  **
2a3d0 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e   on every btree.
2a3e0 20 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72    This is a prer
2a3f0 65 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76  equisite for inv
2a400 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69  oking .  ** sqli
2a410 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
2a420 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  )..  */.#ifdef S
2a430 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
2a440 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d  r(iDb=0; iDb<db-
2a450 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20  >nDb; iDb++){.  
2a460 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31    assert( iDb==1
2a470 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65   || sqlite3Btree
2a480 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61  HoldsMutex(db->a
2a490 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a  Db[iDb].pBt) );.
2a4a0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44    }.#endif..  iD
2a4b0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  b = pOp->p1;.  a
2a4c0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
2a4d0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
2a4e0 20 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50    assert( DbHasP
2a4f0 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c  roperty(db, iDb,
2a500 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
2a510 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74  ) );.  /* Used t
2a520 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e  o be a condition
2a530 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73  al */ {.    zMas
2a540 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42  ter = SCHEMA_TAB
2a550 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69  LE(iDb);.    ini
2a560 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
2a570 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20     initData.iDb 
2a580 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69  = pOp->p1;.    i
2a590 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67  nitData.pzErrMsg
2a5a0 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a   = &p->zErrMsg;.
2a5b0 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
2a5c0 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20  e3MPrintf(db,.  
2a5d0 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
2a5e0 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c  e, rootpage, sql
2a5f0 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48   FROM '%q'.%s WH
2a600 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20  ERE %s ORDER BY 
2a610 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64  rowid",.       d
2a620 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d  b->aDb[iDb].zNam
2a630 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d  e, zMaster, pOp-
2a640 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20  >p4.z);.    if( 
2a650 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  zSql==0 ){.     
2a660 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
2a670 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  EM;.    }else{. 
2a680 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
2a690 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b  >init.busy==0 );
2a6a0 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
2a6b0 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  busy = 1;.      
2a6c0 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51  initData.rc = SQ
2a6d0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61  LITE_OK;.      a
2a6e0 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
2a6f0 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20  ocFailed );.    
2a700 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
2a710 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71  xec(db, zSql, sq
2a720 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
2a730 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29  k, &initData, 0)
2a740 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
2a750 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d  SQLITE_OK ) rc =
2a760 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20   initData.rc;.  
2a770 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
2a780 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  e(db, zSql);.   
2a790 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
2a7a0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
2a7b0 20 20 69 66 28 20 72 63 20 29 20 73 71 6c 69 74    if( rc ) sqlit
2a7c0 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
2a7d0 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
2a7e0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2a7f0 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
2a800 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2a810 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a  }.  break;  .}..
2a820 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2a830 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
2a840 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61  )./* Opcode: Loa
2a850 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a  dAnalysis P1 * *
2a860 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
2a870 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
2a880 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62   table for datab
2a890 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20  ase P1 and load 
2a8a0 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f  the content.** o
2a8b0 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74  f that table int
2a8c0 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69  o the internal i
2a8d0 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e  ndex hash table.
2a8e0 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
2a8f0 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69  e.** the analysi
2a900 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65  s to be used whe
2a910 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20  n preparing all 
2a920 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69  subsequent queri
2a930 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  es..*/.case OP_L
2a940 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20  oadAnalysis: {. 
2a950 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2a960 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
2a970 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d  b->nDb );.  rc =
2a980 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
2a990 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Load(db, pOp->p1
2a9a0 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a  );.  break;  .}.
2a9b0 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
2a9c0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
2a9d0 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f  NALYZE) */../* O
2a9e0 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65  pcode: DropTable
2a9f0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2aa00 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
2aa10 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
2aa20 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
2aa30 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
2aa40 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61  .** the table na
2aa50 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
2aa60 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
2aa70 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
2aa80 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70  able.** is dropp
2aa90 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73  ed from disk (us
2aaa0 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20  ing the Destroy 
2aab0 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72  opcode) in order
2aac0 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65   to keep .** the
2aad0 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
2aae0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
2aaf0 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
2ab00 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
2ab10 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
2ab20 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a  se OP_DropTable:
2ab30 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
2ab40 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
2ab50 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2ab60 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
2ab70 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2ab80 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20   DropIndex P1 * 
2ab90 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
2aba0 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
2abb0 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
2abc0 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
2abd0 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
2abe0 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34  e index named P4
2abf0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2ac00 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
2ac10 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a   after an index.
2ac20 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
2ac30 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
2ac40 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
2ac50 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74  e).** in order t
2ac60 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
2ac70 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
2ac80 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
2ac90 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
2aca0 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
2acb0 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
2acc0 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73  DropIndex: {.  s
2acd0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2ace0 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70  eleteIndex(db, p
2acf0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2ad00 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
2ad10 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
2ad20 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34  rigger P1 * * P4
2ad30 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
2ad40 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
2ad50 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
2ad60 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
2ad70 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72  scribe.** the tr
2ad80 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69  igger named P4 i
2ad90 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2ada0 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
2adb0 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a  fter a trigger.*
2adc0 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f  * is dropped fro
2add0 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68  m disk (using th
2ade0 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65  e Destroy opcode
2adf0 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  ) in order to ke
2ae00 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72  ep .** the inter
2ae10 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
2ae20 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
2ae30 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
2ae40 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
2ae50 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
2ae60 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20  DropTrigger: {. 
2ae70 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2ae80 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64  dDeleteTrigger(d
2ae90 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2aea0 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
2aeb0 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
2aec0 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
2aed0 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f  TY_CHECK./* Opco
2aee0 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20  de: IntegrityCk 
2aef0 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
2af00 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73  .** Do an analys
2af10 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  is of the curren
2af20 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73  tly open databas
2af30 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20  e.  Store in.** 
2af40 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20  register P1 the 
2af50 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72  text of an error
2af60 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62   message describ
2af70 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  ing any problems
2af80 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c  ..** If no probl
2af90 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73  ems are found, s
2afa0 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72  tore a NULL in r
2afb0 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
2afc0 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50  * The register P
2afd0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d  3 contains the m
2afe0 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
2aff0 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e   allowed errors.
2b000 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28  .** At most reg(
2b010 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20  P3) errors will 
2b020 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20  be reported..** 
2b030 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
2b040 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f  the analysis sto
2b050 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65  ps as soon as re
2b060 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65  g(P1) errors are
2b070 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28   .** seen.  Reg(
2b080 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77  P1) is updated w
2b090 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ith the number o
2b0a0 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
2b0b0 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f  ng..**.** The ro
2b0c0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ot page numbers 
2b0d0 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e  of all tables in
2b0e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72   the database ar
2b0f0 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f  e integer.** sto
2b100 72 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20  red in reg(P1), 
2b110 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50  reg(P1+1), reg(P
2b120 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72  1+2), ....  Ther
2b130 65 20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a  e are P2 tables.
2b140 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20  ** total..**.** 
2b150 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72  If P5 is not zer
2b160 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20  o, the check is 
2b170 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69  done on the auxi
2b180 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a  liary database.*
2b190 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20  * file, not the 
2b1a0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2b1b0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  le..**.** This o
2b1c0 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
2b1d0 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69   implement the i
2b1e0 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70  ntegrity_check p
2b1f0 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ragma..*/.case O
2b200 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b  P_IntegrityCk: {
2b210 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20  .  int nRoot;   
2b220 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
2b230 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e  tables to check.
2b240 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f    (Number of roo
2b250 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69  t pages.) */.  i
2b260 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f  nt *aRoot;     /
2b270 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70  * Array of rootp
2b280 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20  age numbers for 
2b290 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65  tables to be che
2b2a0 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b  cked */.  int j;
2b2b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
2b2c0 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
2b2d0 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f  nt nErr;       /
2b2e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
2b2f0 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20  rs reported */. 
2b300 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
2b310 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
2b320 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a  error report */.
2b330 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20    Mem *pnErr;   
2b340 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65    /* Register ke
2b350 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65  eping track of e
2b360 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20  rrors remaining 
2b370 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
2b380 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
2b390 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b  nRoot = pOp->p2;
2b3a0 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74  .  assert( nRoot
2b3b0 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20  >0 );.  aRoot = 
2b3c0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
2b3d0 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e  aw(db, sizeof(in
2b3e0 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a  t)*(nRoot+1) );.
2b3f0 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29    if( aRoot==0 )
2b400 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2b410 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2b420 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
2b430 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
2b440 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20  r) );.  pnErr = 
2b450 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2b460 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
2b470 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
2b480 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  t)!=0 );.  asser
2b490 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
2b4a0 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
2b4b0 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70  Blob))==0 );.  p
2b4c0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2b4d0 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b  >p1];.  for(j=0;
2b4e0 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a   j<nRoot; j++){.
2b4f0 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28      aRoot[j] = (
2b500 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49  int)sqlite3VdbeI
2b510 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d  ntValue(&pIn1[j]
2b520 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a  );.  }.  aRoot[j
2b530 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  ] = 0;.  assert(
2b540 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62   pOp->p5<db->nDb
2b550 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2b560 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
2b570 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20  eMask, pOp->p5) 
2b580 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
2b590 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68  BtreeIntegrityCh
2b5a0 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  eck(db->aDb[pOp-
2b5b0 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c  >p5].pBt, aRoot,
2b5c0 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20   nRoot,.        
2b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5e0 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e           (int)pn
2b5f0 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29  Err->u.i, &nErr)
2b600 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
2b610 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20  e(db, aRoot);.  
2b620 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45  pnErr->u.i -= nE
2b630 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rr;.  sqlite3Vdb
2b640 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
2b650 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30  );.  if( nErr==0
2b660 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2b670 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20  z==0 );.  }else 
2b680 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
2b690 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
2b6a0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
2b6b0 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
2b6c0 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  In1, z, -1, SQLI
2b6d0 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33  TE_UTF8, sqlite3
2b6e0 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50  _free);.  }.  UP
2b6f0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2b700 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  E(pIn1);.  sqlit
2b710 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2b720 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64  ding(pIn1, encod
2b730 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
2b740 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2b750 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2b760 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70  _CHECK */../* Op
2b770 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20  code: RowSetAdd 
2b780 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2b790 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74  ynopsis:  rowset
2b7a0 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  (P1)=r[P2].**.**
2b7b0 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65   Insert the inte
2b7c0 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62  ger value held b
2b7d0 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e  y register P2 in
2b7e0 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  to a boolean ind
2b7f0 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65  ex.** held in re
2b800 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2b810 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2b820 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74  ils if P2 is not
2b830 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
2b840 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64  case OP_RowSetAd
2b850 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  d: {       /* in
2b860 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31  1, in2 */.  pIn1
2b870 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2b880 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
2b890 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
2b8a0 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
2b8b0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
2b8c0 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
2b8d0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2b8e0 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
2b8f0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2b900 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
2b910 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2b920 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2b930 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
2b940 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  m;.  }.  sqlite3
2b950 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
2b960 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
2b970 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  n2->u.i);.  brea
2b980 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2b990 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50   RowSetRead P1 P
2b9a0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2b9b0 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77  psis:  r[P3]=row
2b9c0 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78  set(P1).**.** Ex
2b9d0 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
2b9e0 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f  st value from bo
2b9f0 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61  olean index P1 a
2ba00 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75  nd put that valu
2ba10 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
2ba20 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62  er P3.  Or, if b
2ba30 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
2ba40 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70  is initially emp
2ba50 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20  ty, leave P3.** 
2ba60 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75  unchanged and ju
2ba70 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
2ba80 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
2ba90 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20  _RowSetRead: {  
2baa0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2bab0 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  1, out3 */.  i64
2bac0 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20   val;..  pIn1 = 
2bad0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2bae0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2baf0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2bb00 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
2bb10 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e  e3RowSetNext(pIn
2bb20 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76  1->u.pRowSet, &v
2bb30 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20  al)==0.  ){.    
2bb40 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69  /* The boolean i
2bb50 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f  ndex is empty */
2bb60 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2bb70 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
2bb80 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
2bb90 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20  Taken(1,2);.    
2bba0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f  goto jump_to_p2_
2bbb0 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  and_check_for_in
2bbc0 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65  terrupt;.  }else
2bbd0 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65  {.    /* A value
2bbe0 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d   was pulled from
2bbf0 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
2bc00 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2bc10 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69  n(0,2);.    sqli
2bc20 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
2bc30 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  64(&aMem[pOp->p3
2bc40 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67  ], val);.  }.  g
2bc50 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
2bc60 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f  terrupt;.}../* O
2bc70 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73  pcode: RowSetTes
2bc80 74 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a  t P1 P2 P3 P4.**
2bc90 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
2bca0 50 33 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31  P3] in rowset(P1
2bcb0 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ) goto P2.**.** 
2bcc0 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61  Register P3 is a
2bcd0 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61  ssumed to hold a
2bce0 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20   64-bit integer 
2bcf0 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74  value. If regist
2bd00 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e  er P1.** contain
2bd10 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  s a RowSet objec
2bd20 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65  t and that RowSe
2bd30 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e  t object contain
2bd40 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68  s.** the value h
2bd50 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20  eld in P3, jump 
2bd60 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  to register P2. 
2bd70 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72  Otherwise, inser
2bd80 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72  t the.** integer
2bd90 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20   in P3 into the 
2bda0 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69  RowSet and conti
2bdb0 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a  nue on to the.**
2bdc0 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a   next opcode..**
2bdd0 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f  .** The RowSet o
2bde0 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a  bject is optimiz
2bdf0 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20  ed for the case 
2be00 77 68 65 72 65 20 73 75 63 63 65 73 73 69 76 65  where successive
2be10 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65   sets.** of inte
2be20 67 65 72 73 2c 20 77 68 65 72 65 20 65 61 63 68  gers, where each
2be30 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f   set contains no
2be40 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63   duplicates. Eac
2be50 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75  h set.** of valu
2be60 65 73 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  es is identified
2be70 20 62 79 20 61 20 75 6e 69 71 75 65 20 50 34 20   by a unique P4 
2be80 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74  value. The first
2be90 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76   set.** must hav
2bea0 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e  e P4==0, the fin
2beb0 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50  al set P4=-1.  P
2bec0 34 20 6d 75 73 74 20 62 65 20 65 69 74 68 65 72  4 must be either
2bed0 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65   -1 or.** non-ne
2bee0 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e  gative.  For non
2bef0 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73  -negative values
2bf00 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20   of P4 only the 
2bf10 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20  lower 4.** bits 
2bf20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e  are significant.
2bf30 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f  .**.** This allo
2bf40 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ws optimizations
2bf50 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30  : (a) when P4==0
2bf60 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
2bf70 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65  d to test.** the
2bf80 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66   rowset object f
2bf90 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69 73 20  or P3, as it is 
2bfa0 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74  guaranteed not t
2bfb0 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a  o contain it,.**
2bfc0 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31   (b) when P4==-1
2bfd0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
2bfe0 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20  d to insert the 
2bff0 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c  value, as it wil
2c000 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65  l.** never be te
2c010 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63  sted for, and (c
2c020 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74  ) when a value t
2c030 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 73  hat is part of s
2c040 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72  et X is.** inser
2c050 74 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f  ted, there is no
2c060 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68 20   need to search 
2c070 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 73 61  to see if the sa
2c080 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20  me value was.** 
2c090 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72  previously inser
2c0a0 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
2c0b0 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74  et X (only if it
2c0c0 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a   was previously.
2c0d0 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ** inserted as p
2c0e0 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65  art of some othe
2c0f0 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20  r set)..*/.case 
2c100 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b  OP_RowSetTest: {
2c110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c120 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2c130 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  1, in3 */.  int 
2c140 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73  iSet;.  int exis
2c150 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  ts;..  pIn1 = &a
2c160 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2c170 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
2c180 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20  ->p3];.  iSet = 
2c190 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73  pOp->p4.i;.  ass
2c1a0 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
2c1b0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f  &MEM_Int );..  /
2c1c0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e  * If there is an
2c1d0 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61  ything other tha
2c1e0 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63  n a rowset objec
2c1f0 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  t in memory cell
2c200 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65   P1,.  ** delete
2c210 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74   it now and init
2c220 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61  ialize P1 with a
2c230 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20  n empty rowset. 
2c240 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   */.  if( (pIn1-
2c250 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2c260 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
2c270 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2c280 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
2c290 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2c2a0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2c2b0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
2c2c0 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  m;.  }..  assert
2c2d0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
2c2e0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73  4_INT32 );.  ass
2c2f0 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c  ert( iSet==-1 ||
2c300 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66   iSet>=0 );.  if
2c310 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78  ( iSet ){.    ex
2c320 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f  ists = sqlite3Ro
2c330 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75  wSetTest(pIn1->u
2c340 2e 70 52 6f 77 53 65 74 2c 20 69 53 65 74 2c 20  .pRowSet, iSet, 
2c350 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20  pIn3->u.i);.    
2c360 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2c370 65 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20  exists!=0,2);.  
2c380 20 20 69 66 28 20 65 78 69 73 74 73 20 29 20 67    if( exists ) g
2c390 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2c3a0 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d    }.  if( iSet>=
2c3b0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
2c3c0 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
2c3d0 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
2c3e0 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20  n3->u.i);.  }.  
2c3f0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
2c400 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2c410 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64  RIGGER../* Opcod
2c420 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32  e: Program P1 P2
2c430 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
2c440 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67  Execute the trig
2c450 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73  ger program pass
2c460 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50  ed as P4 (type P
2c470 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a  4_SUBPROGRAM). .
2c480 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e  **.** P1 contain
2c490 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
2c4a0 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
2c4b0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
2c4c0 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20  he first memory 
2c4d0 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61  .** cell in an a
2c4e0 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75  rray of values u
2c4f0 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73  sed as arguments
2c500 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67   to the sub-prog
2c510 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74  ram. P2 .** cont
2c520 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
2c530 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74   to jump to if t
2c540 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  he sub-program t
2c550 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20  hrows an IGNORE 
2c560 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73  .** exception us
2c570 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20  ing the RAISE() 
2c580 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74  function. Regist
2c590 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
2c5a0 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f  he address .** o
2c5b0 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  f a memory cell 
2c5c0 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72  in this (the par
2c5d0 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20  ent) VM that is 
2c5e0 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65  used to allocate
2c5f0 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
2c600 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
2c610 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74  sub-vdbe at runt
2c620 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ime..**.** P4 is
2c630 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
2c640 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20  e VM containing 
2c650 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
2c660 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ram..**.** If P5
2c670 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2c680 65 6e 20 72 65 63 75 72 73 69 76 65 20 70 72 6f  en recursive pro
2c690 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20  gram invocation 
2c6a0 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63  is enabled..*/.c
2c6b0 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20  ase OP_Program: 
2c6c0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2c6d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
2c6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2c6f0 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
2c700 79 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20  y registers for 
2c710 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
2c720 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20   int nByte;     
2c730 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65           /* Byte
2c740 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61  s of runtime spa
2c750 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
2c760 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
2c770 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20   Mem *pRt;      
2c780 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
2c790 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65  ster to allocate
2c7a0 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a   runtime space *
2c7b0 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
2c7d0 73 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74  sed to iterate t
2c7e0 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65  hrough memory ce
2c7f0 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45  lls */.  Mem *pE
2c800 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
2c810 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20   /* Last memory 
2c820 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61  cell in new arra
2c830 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  y */.  VdbeFrame
2c840 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f   *pFrame;      /
2c850 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65  * New vdbe frame
2c860 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a   to execute in *
2c870 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
2c880 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53  pProgram;   /* S
2c890 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78  ub-program to ex
2c8a0 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20  ecute */.  void 
2c8b0 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *t;             
2c8c0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e     /* Token iden
2c8d0 74 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20  tifying trigger 
2c8e0 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d  */..  pProgram =
2c8f0 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61   pOp->p4.pProgra
2c900 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d  m;.  pRt = &aMem
2c910 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
2c920 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
2c930 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20  Op>0 );.  .  /* 
2c940 49 66 20 74 68 65 20 70 35 20 66 6c 61 67 20 69  If the p5 flag i
2c950 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65  s clear, then re
2c960 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69  cursive invocati
2c970 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20 69  on of triggers i
2c980 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64  s .  ** disabled
2c990 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63   for backwards c
2c9a0 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70 35  ompatibility (p5
2c9b0 20 69 73 20 73 65 74 20 69 66 20 74 68 69 73 20   is set if this 
2c9c0 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a  sub-program.  **
2c9d0 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69   is really a tri
2c9e0 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65  gger, not a fore
2c9f0 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20  ign key action, 
2ca00 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65 74  and the flag set
2ca10 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65  .  ** and cleare
2ca20 64 20 62 79 20 74 68 65 20 22 50 52 41 47 4d 41  d by the "PRAGMA
2ca30 20 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67   recursive_trigg
2ca40 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20  ers" command is 
2ca50 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20  clear)..  ** .  
2ca60 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69  ** It is recursi
2ca70 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ve invocation of
2ca80 20 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68   triggers, at th
2ca90 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61  e SQL level, tha
2caa0 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62  t is .  ** disab
2cab0 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73  led. In some cas
2cac0 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67  es a single trig
2cad0 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65  ger may generate
2cae0 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a   more than one .
2caf0 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20    ** SubProgram 
2cb00 28 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20  (if the trigger 
2cb10 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20  may be executed 
2cb20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f  with more than o
2cb30 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20  ne different .  
2cb40 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  ** ON CONFLICT a
2cb50 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72  lgorithm). SubPr
2cb60 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73  ogram structures
2cb70 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
2cb80 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74   a.  ** single t
2cb90 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20  rigger all have 
2cba0 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
2cbb0 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61  or the SubProgra
2cbc0 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61  m.token .  ** va
2cbd0 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66  riable.  */.  if
2cbe0 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
2cbf0 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74   t = pProgram->t
2cc00 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46  oken;.    for(pF
2cc10 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
2cc20 70 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65  pFrame && pFrame
2cc30 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61  ->token!=t; pFra
2cc40 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
2cc50 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72  nt);.    if( pFr
2cc60 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d  ame ) break;.  }
2cc70 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d  ..  if( p->nFram
2cc80 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  e>=db->aLimit[SQ
2cc90 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47  LITE_LIMIT_TRIGG
2cca0 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20  ER_DEPTH] ){.   
2ccb0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
2ccc0 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  OR;.    sqlite3V
2ccd0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f  dbeError(p, "too
2cce0 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20   many levels of 
2ccf0 74 72 69 67 67 65 72 20 72 65 63 75 72 73 69 6f  trigger recursio
2cd00 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  n");.    break;.
2cd10 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74    }..  /* Regist
2cd20 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74  er pRt is used t
2cd30 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f  o store the memo
2cd40 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73  ry required to s
2cd50 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20  ave the state.  
2cd60 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ** of the curren
2cd70 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74  t program, and t
2cd80 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
2cd90 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f  ed at runtime to
2cda0 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68   execute.  ** th
2cdb0 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2cdc0 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67  m. If this trigg
2cdd0 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65  er has been fire
2cde0 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70  d before, then p
2cdf0 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65  Rt .  ** is alre
2ce00 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f  ady allocated. O
2ce10 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73  therwise, it mus
2ce20 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
2ce30 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74  .  */.  if( (pRt
2ce40 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d  ->flags&MEM_Fram
2ce50 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  e)==0 ){.    /* 
2ce60 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20  SubProgram.nMem 
2ce70 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
2ce80 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
2ce90 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65  ells used by the
2cea0 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d   .    ** program
2ceb0 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72   stored in SubPr
2cec0 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65  ogram.aOp. As we
2ced0 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65  ll as these, one
2cee0 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63   memory.    ** c
2cef0 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20  ell is required 
2cf00 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20  for each cursor 
2cf10 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
2cf20 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20  ram. Set local. 
2cf30 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e     ** variable n
2cf40 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20  Mem (and later, 
2cf50 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64  VdbeFrame.nChild
2cf60 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c  Mem) to this val
2cf70 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e  ue..    */.    n
2cf80 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem = pProgram->
2cf90 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d  nMem + pProgram-
2cfa0 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65  >nCsr;.    nByte
2cfb0 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66   = ROUND8(sizeof
2cfc0 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20  (VdbeFrame)).   
2cfd0 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65             + nMe
2cfe0 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a  m * sizeof(Mem).
2cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
2d000 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a  pProgram->nCsr *
2d010 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73   sizeof(VdbeCurs
2d020 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20  or *).          
2d030 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
2d040 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75  nOnce * sizeof(u
2d050 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  8);.    pFrame =
2d060 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
2d070 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b  Zero(db, nByte);
2d080 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65  .    if( !pFrame
2d090 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
2d0a0 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
2d0b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
2d0c0 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20  elease(pRt);.   
2d0d0 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45   pRt->flags = ME
2d0e0 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74  M_Frame;.    pRt
2d0f0 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72  ->u.pFrame = pFr
2d100 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65  ame;..    pFrame
2d110 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72  ->v = p;.    pFr
2d120 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d  ame->nChildMem =
2d130 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d   nMem;.    pFram
2d140 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70  e->nChildCsr = p
2d150 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
2d160 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20     pFrame->pc = 
2d170 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
2d180 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d  ;.    pFrame->aM
2d190 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
2d1a0 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d    pFrame->nMem =
2d1b0 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46   p->nMem;.    pF
2d1c0 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d  rame->apCsr = p-
2d1d0 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61  >apCsr;.    pFra
2d1e0 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d  me->nCursor = p-
2d1f0 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46  >nCursor;.    pF
2d200 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61  rame->aOp = p->a
2d210 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
2d220 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20  nOp = p->nOp;.  
2d230 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20    pFrame->token 
2d240 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
2d250 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  n;.    pFrame->a
2d260 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f  OnceFlag = p->aO
2d270 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72  nceFlag;.    pFr
2d280 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d  ame->nOnceFlag =
2d290 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23   p->nOnceFlag;.#
2d2a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2d2b0 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
2d2c0 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  TUS.    pFrame->
2d2d0 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78  anExec = p->anEx
2d2e0 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  ec;.#endif..    
2d2f0 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d  pEnd = &VdbeFram
2d300 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72  eMem(pFrame)[pFr
2d310 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b  ame->nChildMem];
2d320 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64  .    for(pMem=Vd
2d330 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2d340 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20  e); pMem!=pEnd; 
2d350 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70  pMem++){.      p
2d360 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Mem->flags = MEM
2d370 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20  _Undefined;.    
2d380 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b    pMem->db = db;
2d390 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
2d3a0 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74      pFrame = pRt
2d3b0 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20  ->u.pFrame;.    
2d3c0 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2d3d0 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d  ->nMem+pProgram-
2d3e0 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
2d3f0 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20  ChildMem );.    
2d400 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2d410 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
2d420 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20  nChildCsr );.   
2d430 20 61 73 73 65 72 74 28 20 28 69 6e 74 29 28 70   assert( (int)(p
2d440 4f 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d  Op - aOp)==pFram
2d450 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20  e->pc );.  }..  
2d460 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70  p->nFrame++;.  p
2d470 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d  Frame->pParent =
2d480 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46   p->pFrame;.  pF
2d490 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20  rame->lastRowid 
2d4a0 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70  = lastRowid;.  p
2d4b0 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d  Frame->nChange =
2d4c0 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70   p->nChange;.  p
2d4d0 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65  Frame->nDbChange
2d4e0 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67   = p->db->nChang
2d4f0 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  e;.  p->nChange 
2d500 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65  = 0;.  p->pFrame
2d510 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e   = pFrame;.  p->
2d520 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56  aMem = aMem = &V
2d530 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
2d540 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d  me)[-1];.  p->nM
2d550 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68  em = pFrame->nCh
2d560 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75  ildMem;.  p->nCu
2d570 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61  rsor = (u16)pFra
2d580 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20  me->nChildCsr;. 
2d590 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62   p->apCsr = (Vdb
2d5a0 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d  eCursor **)&aMem
2d5b0 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70  [p->nMem+1];.  p
2d5c0 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50  ->aOp = aOp = pP
2d5d0 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70  rogram->aOp;.  p
2d5e0 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d  ->nOp = pProgram
2d5f0 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63  ->nOp;.  p->aOnc
2d600 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70  eFlag = (u8 *)&p
2d610 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73  ->apCsr[p->nCurs
2d620 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46  or];.  p->nOnceF
2d630 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  lag = pProgram->
2d640 6e 4f 6e 63 65 3b 0a 23 69 66 64 65 66 20 53 51  nOnce;.#ifdef SQ
2d650 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
2d660 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d  _SCANSTATUS.  p-
2d670 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e  >anExec = 0;.#en
2d680 64 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  dif.  pOp = &aOp
2d690 5b 2d 31 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70  [-1];.  memset(p
2d6a0 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20  ->aOnceFlag, 0, 
2d6b0 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a  p->nOnceFlag);..
2d6c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2d6d0 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20  pcode: Param P1 
2d6e0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
2d6f0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  his opcode is on
2d700 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20  ly ever present 
2d710 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20  in sub-programs 
2d720 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a  called via the .
2d730 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ** OP_Program in
2d740 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20  struction. Copy 
2d750 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c  a value currentl
2d760 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65  y stored in a me
2d770 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66  mory .** cell of
2d780 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61   the calling (pa
2d790 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63  rent) frame to c
2d7a0 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75  ell P2 in the cu
2d7b0 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a  rrent frames .**
2d7c0 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20   address space. 
2d7d0 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
2d7e0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
2d7f0 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e   to access the n
2d800 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64  ew.* .** and old
2d810 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  .* values..**.**
2d820 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   The address of 
2d830 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  the cell in the 
2d840 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20  parent frame is 
2d850 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64  determined by ad
2d860 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ding.** the valu
2d870 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
2d880 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75  ment to the valu
2d890 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
2d8a0 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ment to the.** c
2d8b0 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
2d8c0 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  m instruction..*
2d8d0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a  /.case OP_Param:
2d8e0 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
2d8f0 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72  out2 */.  VdbeFr
2d900 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d  ame *pFrame;.  M
2d910 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20  em *pIn;.  pOut 
2d920 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
2d930 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61  (p, pOp);.  pFra
2d940 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
2d950 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d    pIn = &pFrame-
2d960 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20  >aMem[pOp->p1 + 
2d970 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61  pFrame->aOp[pFra
2d980 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a  me->pc].p1];   .
2d990 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2d9a0 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
2d9b0 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d  , pIn, MEM_Ephem
2d9c0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
2d9d0 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
2d9e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
2d9f0 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GGER */..#ifndef
2da00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
2da10 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f  EIGN_KEY./* Opco
2da20 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31  de: FkCounter P1
2da30 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2da40 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d  opsis: fkctr[P1]
2da50 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65  +=P2.**.** Incre
2da60 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69  ment a "constrai
2da70 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50  nt counter" by P
2da80 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67  2 (P2 may be neg
2da90 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
2daa0 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  e)..** If P1 is 
2dab0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61  non-zero, the da
2dac0 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
2dad0 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
2dae0 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65  remented .** (de
2daf0 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b  ferred foreign k
2db00 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
2db10 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
2db20 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a  1 is zero, the .
2db30 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75  ** statement cou
2db40 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
2db50 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66  ted (immediate f
2db60 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2db70 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65  raints)..*/.case
2db80 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b   OP_FkCounter: {
2db90 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73  .  if( db->flags
2dba0 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46   & SQLITE_DeferF
2dbb0 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44  Ks ){.    db->nD
2dbc0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b  eferredImmCons +
2dbd0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c  = pOp->p2;.  }el
2dbe0 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  se if( pOp->p1 )
2dbf0 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72  {.    db->nDefer
2dc00 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e  redCons += pOp->
2dc10 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
2dc20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
2dc30 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  t += pOp->p2;.  
2dc40 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2dc50 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72   Opcode: FkIfZer
2dc60 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
2dc70 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b   Synopsis: if fk
2dc80 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20  ctr[P1]==0 goto 
2dc90 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P2.**.** This op
2dca0 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20  code tests if a 
2dcb0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2dcc0 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
2dcd0 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
2dce0 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70  ..** If so, jump
2dcf0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
2dd00 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
2dd10 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
2dd20 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74  he next .** inst
2dd30 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
2dd40 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
2dd50 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20  , then the jump 
2dd60 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
2dd70 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
2dd80 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69  int-counter.** i
2dd90 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20  s zero (the one 
2dda0 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65  that counts defe
2ddb0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20  rred constraint 
2ddc0 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20  violations). If 
2ddd0 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74  P1 is.** zero, t
2dde0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
2ddf0 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   if the statemen
2de00 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  t constraint-cou
2de10 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20  nter is zero.** 
2de20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
2de30 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2de40 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a  t violations)..*
2de50 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65  /.case OP_FkIfZe
2de60 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  ro: {         /*
2de70 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
2de80 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64  Op->p1 ){.    Vd
2de90 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62  beBranchTaken(db
2dea0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
2deb0 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
2dec0 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32  redImmCons==0, 2
2ded0 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  );.    if( db->n
2dee0 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20  DeferredCons==0 
2def0 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
2df00 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74  ImmCons==0 ) got
2df10 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2df20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
2df30 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46  ranchTaken(p->nF
2df40 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
2df50 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2df60 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20  mmCons==0, 2);. 
2df70 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e     if( p->nFkCon
2df80 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62  straint==0 && db
2df90 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
2dfa0 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  ns==0 ) goto jum
2dfb0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
2dfc0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2dfd0 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
2dfe0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
2dff0 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  Y */..#ifndef SQ
2e000 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
2e010 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
2e020 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
2e030 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2e040 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50  s: r[P1]=max(r[P
2e050 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  1],r[P2]).**.** 
2e060 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P1 is a register
2e070 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
2e080 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74  me of this VM (t
2e090 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73  he root frame is
2e0a0 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72  .** different fr
2e0b0 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  om the current f
2e0c0 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73  rame if this ins
2e0d0 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e  truction is bein
2e0e0 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69  g executed.** wi
2e0f0 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72  thin a sub-progr
2e100 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c  am). Set the val
2e110 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
2e120 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d  1 to the maximum
2e130 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72   of .** its curr
2e140 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68  ent value and th
2e150 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
2e160 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
2e170 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  is instruction t
2e180 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
2e190 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
2e1a0 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c  l is not initial
2e1b0 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ly.** an integer
2e1c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d  ..*/.case OP_Mem
2e1d0 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Max: {        /*
2e1e0 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72   in2 */.  VdbeFr
2e1f0 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
2e200 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
2e210 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
2e220 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
2e230 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
2e240 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
2e250 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  t);.    pIn1 = &
2e260 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
2e270 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->p1];.  }else{.
2e280 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d      pIn1 = &aMem
2e290 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20  [pOp->p1];.  }. 
2e2a0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2e2b0 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73  lid(pIn1) );.  s
2e2c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
2e2d0 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
2e2e0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
2e2f0 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
2e300 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
2e310 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  fy(pIn2);.  if( 
2e320 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e  pIn1->u.i<pIn2->
2e330 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  u.i){.    pIn1->
2e340 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b  u.i = pIn2->u.i;
2e350 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2e360 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2e370 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
2e380 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ENT */../* Opcod
2e390 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a  e: IfPos P1 P2 *
2e3a0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2e3b0 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 67 6f 74  : if r[P1]>0 got
2e3c0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2e3d0 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
2e3e0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
2e3f0 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
2e400 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2e410 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20  s 1 or greater, 
2e420 6a 75 6d 70 20 74 6f 20 50 32 20 61 6e 64 0a 2a  jump to P2 and.*
2e430 2a 20 61 64 64 20 74 68 65 20 6c 69 74 65 72 61  * add the litera
2e440 6c 20 76 61 6c 75 65 20 50 33 20 74 6f 20 72 65  l value P3 to re
2e450 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2e460 20 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20   If the initial 
2e470 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
2e480 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61  r P1 is less tha
2e490 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  n 1, then the.**
2e4a0 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e   value is unchan
2e4b0 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20  ged and control 
2e4c0 70 61 73 73 65 73 20 74 68 72 6f 75 67 68 20 74  passes through t
2e4d0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2e4e0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2e4f0 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20  OP_IfPos: {     
2e500 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2e510 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2e520 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2e530 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2e540 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
2e550 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
2e560 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b  pIn1->u.i>0, 2);
2e570 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2e580 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  >0 ) goto jump_t
2e590 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
2e5a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  ../* Opcode: IfN
2e5b0 65 67 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  eg P1 P2 P3 * *.
2e5c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
2e5d0 31 5d 2b 3d 50 33 2c 20 69 66 20 72 5b 50 31 5d  1]+=P3, if r[P1]
2e5e0 3c 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  <0 goto P2.**.**
2e5f0 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
2e600 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2e610 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72  eger.  Add liter
2e620 61 6c 20 50 33 20 74 6f 20 74 68 65 20 76 61 6c  al P3 to the val
2e630 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  ue in.** registe
2e640 72 20 50 31 20 74 68 65 6e 20 69 66 20 74 68 65  r P1 then if the
2e650 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2e660 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68  er P1 is less th
2e670 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f  an zero, jump to
2e680 20 50 32 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50   P2. .*/.case OP
2e690 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20  _IfNeg: {       
2e6a0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2e6b0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2e6c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2e6d0 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2e6e0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e  MEM_Int );.  pIn
2e6f0 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70  1->u.i += pOp->p
2e700 33 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  3;.  VdbeBranchT
2e710 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30  aken(pIn1->u.i<0
2e720 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  , 2);.  if( pIn1
2e730 2d 3e 75 2e 69 3c 30 20 29 20 67 6f 74 6f 20 6a  ->u.i<0 ) goto j
2e740 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
2e750 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2e760 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50  : IfNotZero P1 P
2e770 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2e780 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
2e790 30 20 74 68 65 6e 20 72 5b 50 31 5d 2b 3d 50 33  0 then r[P1]+=P3
2e7a0 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  , goto P2.**.** 
2e7b0 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  Register P1 must
2e7c0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2e7d0 67 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e  ger.  If the con
2e7e0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
2e7f0 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61   P1 is.** initia
2e800 6c 6c 79 20 6e 6f 6e 7a 65 72 6f 2c 20 74 68 65  lly nonzero, the
2e810 6e 20 61 64 64 20 50 33 20 74 6f 20 50 31 20 61  n add P3 to P1 a
2e820 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  nd jump to P2.  
2e830 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  If register P1 i
2e840 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 7a  s.** initially z
2e850 65 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75 6e  ero, leave it un
2e860 63 68 61 6e 67 65 64 20 61 6e 64 20 66 61 6c 6c  changed and fall
2e870 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73   through..*/.cas
2e880 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20  e OP_IfNotZero: 
2e890 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2e8a0 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
2e8b0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2e8c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
2e8d0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2e8e0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
2e8f0 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30  aken(pIn1->u.i<0
2e900 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  , 2);.  if( pIn1
2e910 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 70 49  ->u.i ){.     pI
2e920 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e  n1->u.i += pOp->
2e930 70 33 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75  p3;.     goto ju
2e940 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
2e950 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2e960 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72  ode: DecrJumpZer
2e970 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
2e980 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d   Synopsis: if (-
2e990 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20  -r[P1])==0 goto 
2e9a0 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
2e9b0 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61  r P1 must hold a
2e9c0 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72  n integer.  Decr
2e9d0 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20  ement the value 
2e9e0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  in register P1.*
2e9f0 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  * then jump to P
2ea00 32 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c  2 if the new val
2ea10 75 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65  ue is exactly ze
2ea20 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ro..*/.case OP_D
2ea30 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20  ecrJumpZero: {  
2ea40 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2ea50 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2ea60 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2ea70 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2ea80 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
2ea90 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56  pIn1->u.i--;.  V
2eaa0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
2eab0 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b  In1->u.i==0, 2);
2eac0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2ead0 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
2eae0 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
2eaf0 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  }.../* Opcode: J
2eb00 75 6d 70 5a 65 72 6f 49 6e 63 72 20 50 31 20 50  umpZeroIncr P1 P
2eb10 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2eb20 73 69 73 3a 20 69 66 20 28 72 5b 50 31 5d 2b 2b  sis: if (r[P1]++
2eb30 29 3d 3d 30 20 29 20 67 6f 74 6f 20 50 32 0a 2a  )==0 ) goto P2.*
2eb40 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
2eb50 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
2eb60 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  n an integer.  I
2eb70 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2eb80 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 7a 65   initially.** ze
2eb90 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
2eba0 20 50 32 2e 20 20 49 6e 63 72 65 6d 65 6e 74 20   P2.  Increment 
2ebb0 72 65 67 69 73 74 65 72 20 50 31 20 72 65 67 61  register P1 rega
2ebc0 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
2ebd0 72 20 6f 72 0a 2a 2a 20 6e 6f 74 20 74 68 65 20  r or.** not the 
2ebe0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2e 0a 2a  jump is taken..*
2ebf0 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 5a 65  /.case OP_JumpZe
2ec00 72 6f 49 6e 63 72 3a 20 7b 20 20 20 20 20 20 20  roIncr: {       
2ec10 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2ec20 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2ec30 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2ec40 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2ec50 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62  MEM_Int );.  Vdb
2ec60 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e  eBranchTaken(pIn
2ec70 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20  1->u.i==0, 2);. 
2ec80 20 69 66 28 20 28 70 49 6e 31 2d 3e 75 2e 69 2b   if( (pIn1->u.i+
2ec90 2b 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  +)==0 ) goto jum
2eca0 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
2ecb0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2ecc0 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
2ecd0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2ece0 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73  s: accum=r[P3] s
2ecf0 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  tep(r[P2@P5]).**
2ed00 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2ed10 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
2ed20 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
2ed30 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
2ed40 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
2ed50 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
2ed60 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
2ed70 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  Def.** structure
2ed80 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
2ed90 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55  the function.  U
2eda0 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  se register.** P
2edb0 33 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c  3 as the accumul
2edc0 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
2edd0 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
2ede0 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
2edf0 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
2ee00 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
2ee10 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  /.case OP_AggSte
2ee20 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20  p0: {.  int n;. 
2ee30 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
2ee40 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72   *pCtx;..  asser
2ee50 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
2ee60 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20  P4_FUNCDEF );.  
2ee70 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61  n = pOp->p5;.  a
2ee80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2ee90 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
2eea0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
2eeb0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  ) );.  assert( n
2eec0 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
2eed0 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
2eee0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
2eef0 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73  sor)+1) );.  ass
2ef00 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
2ef10 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p2 || pOp->p3>
2ef20 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20  =pOp->p2+n );.  
2ef30 70 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62  pCtx = sqlite3Db
2ef40 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69  MallocRaw(db, si
2ef50 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b 20 28 6e  zeof(*pCtx) + (n
2ef60 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74  -1)*sizeof(sqlit
2ef70 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69  e3_value*));.  i
2ef80 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67 6f 74  f( pCtx==0 ) got
2ef90 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78  o no_mem;.  pCtx
2efa0 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43  ->pMem = 0;.  pC
2efb0 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  tx->pFunc = pOp-
2efc0 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74  >p4.pFunc;.  pCt
2efd0 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28 70  x->iOp = (int)(p
2efe0 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74  Op - aOp);.  pCt
2eff0 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20  x->pVdbe = p;.  
2f000 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a  pCtx->argc = n;.
2f010 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
2f020 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f  P4_FUNCCTX;.  pO
2f030 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70 43 74  p->p4.pCtx = pCt
2f040 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  x;.  pOp->opcode
2f050 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 3b 0a 20   = OP_AggStep;. 
2f060 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
2f070 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65 70   into OP_AggStep
2f080 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67   */.}.case OP_Ag
2f090 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 69  gStep: {.  int i
2f0a0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
2f0b0 65 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d  ext *pCtx;.  Mem
2f0c0 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 74 3b   *pMem;.  Mem t;
2f0d0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2f0e0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
2f0f0 43 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d 20  CTX );.  pCtx = 
2f100 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 20 20  pOp->p4.pCtx;.  
2f110 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2f120 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20  ->p3];..  /* If 
2f130 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  this function is
2f140 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72 69   inside of a tri
2f150 67 67 65 72 2c 20 74 68 65 20 72 65 67 69 73 74  gger, the regist
2f160 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65 6d  er array in aMem
2f170 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63 68  [].  ** might ch
2f180 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76  ange from one ev
2f190 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65 20  aluation to the 
2f1a0 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74 20  next.  The next 
2f1b0 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20  block of code.  
2f1c0 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65  ** checks to see
2f1d0 20 69 66 20 74 68 65 20 72 65 67 69 73 74 65 72   if the register
2f1e0 20 61 72 72 61 79 20 68 61 73 20 63 68 61 6e 67   array has chang
2f1f0 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69 74  ed, and if so it
2f200 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69  .  ** reinitiali
2f210 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e 74  zes the relavant
2f220 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 73 71   parts of the sq
2f230 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62  lite3_context ob
2f240 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28 20 70 43  ject */.  if( pC
2f250 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d 65 6d  tx->pMem != pMem
2f260 20 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4d   ){.    pCtx->pM
2f270 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20 66  em = pMem;.    f
2f280 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d  or(i=pCtx->argc-
2f290 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43  1; i>=0; i--) pC
2f2a0 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61  tx->argv[i] = &a
2f2b0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a  Mem[pOp->p2+i];.
2f2c0 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49    }..#ifdef SQLI
2f2d0 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69  TE_DEBUG.  for(i
2f2e0 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67 63  =0; i<pCtx->argc
2f2f0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
2f300 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
2f310 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b  Ctx->argv[i]) );
2f320 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
2f330 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70  ACE(pOp->p2+i, p
2f340 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20  Ctx->argv[i]);. 
2f350 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4d 65   }.#endif..  pMe
2f360 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74 65  m->n++;.  sqlite
2f370 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 26 74 2c  3VdbeMemInit(&t,
2f380 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a   db, MEM_Null);.
2f390 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 26    pCtx->pOut = &
2f3a0 74 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72 72 6f  t;.  pCtx->fErro
2f3b0 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20 70 43  rOrAux = 0;.  pC
2f3c0 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30  tx->skipFlag = 0
2f3d0 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46 75 6e 63  ;.  (pCtx->pFunc
2f3e0 2d 3e 78 53 74 65 70 29 28 70 43 74 78 2c 70 43  ->xStep)(pCtx,pC
2f3f0 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61  tx->argc,pCtx->a
2f400 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d  rgv); /* IMP: R-
2f410 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20  24505-23230 */. 
2f420 20 69 66 28 20 70 43 74 78 2d 3e 66 45 72 72 6f   if( pCtx->fErro
2f430 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66  rOrAux ){.    if
2f440 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20  ( pCtx->isError 
2f450 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2f460 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73  VdbeError(p, "%s
2f470 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
2f480 5f 74 65 78 74 28 26 74 29 29 3b 0a 20 20 20 20  _text(&t));.    
2f490 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73 45    rc = pCtx->isE
2f4a0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
2f4b0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
2f4c0 6c 65 61 73 65 28 26 74 29 3b 0a 20 20 7d 65 6c  lease(&t);.  }el
2f4d0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2f4e0 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c  t.flags==MEM_Nul
2f4f0 6c 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  l );.  }.  if( p
2f500 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b  Ctx->skipFlag ){
2f510 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2f520 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
2f530 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69  CollSeq );.    i
2f540 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20   = pOp[-1].p1;. 
2f550 20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69 74     if( i ) sqlit
2f560 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
2f570 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a  4(&aMem[i], 1);.
2f580 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2f590 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69  /* Opcode: AggFi
2f5a0 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a  nal P1 P2 * P4 *
2f5b0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
2f5c0 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a  cum=r[P1] N=P2.*
2f5d0 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
2f5e0 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74   finalizer funct
2f5f0 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
2f600 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20  gate.  P1 is.** 
2f610 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
2f620 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20  ion that is the 
2f630 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20  accumulator for 
2f640 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a  the aggregate..*
2f650 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
2f660 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
2f670 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70  ts that the step
2f680 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20   function takes 
2f690 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  and.** P4 is a p
2f6a0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
2f6b0 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66  ncDef for this f
2f6c0 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32  unction.  The P2
2f6d0 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20  .** argument is 
2f6e0 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73  not used by this
2f6f0 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20   opcode.  It is 
2f700 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69  only there to di
2f710 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75  sambiguate.** fu
2f720 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e  nctions that can
2f730 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75   take varying nu
2f740 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e  mbers of argumen
2f750 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61  ts.  The.** P4 a
2f760 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20  rgument is only 
2f770 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 64  needed for the d
2f780 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20 77  egenerate case w
2f790 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70  here.** the step
2f7a0 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f   function was no
2f7b0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c  t previously cal
2f7c0 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  led..*/.case OP_
2f7d0 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65  AggFinal: {.  Me
2f7e0 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72  m *pMem;.  asser
2f7f0 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
2f800 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
2f810 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
2f820 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
2f830 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2f840 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
2f850 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45   & ~(MEM_Null|ME
2f860 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Agg))==0 );.  
2f870 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2f880 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d  MemFinalize(pMem
2f890 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29  , pOp->p4.pFunc)
2f8a0 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
2f8b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
2f8c0 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69  or(p, "%s", sqli
2f8d0 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70  te3_value_text(p
2f8e0 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  Mem));.  }.  sql
2f8f0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
2f900 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63  coding(pMem, enc
2f910 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45  oding);.  UPDATE
2f920 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d  _MAX_BLOBSIZE(pM
2f930 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  em);.  if( sqlit
2f940 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
2f950 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74  pMem) ){.    got
2f960 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
2f970 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
2f980 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
2f990 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68  AL./* Opcode: Ch
2f9a0 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50  eckpoint P1 P2 P
2f9b0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63  3 * *.**.** Chec
2f9c0 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20  kpoint database 
2f9d0 50 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f  P1. This is a no
2f9e0 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74  -op if P1 is not
2f9f0 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a   currently in.**
2fa00 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d   WAL mode. Param
2fa10 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f  eter P2 is one o
2fa20 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  f SQLITE_CHECKPO
2fa30 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c  INT_PASSIVE, FUL
2fa40 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20 6f  L,.** RESTART, o
2fa50 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57 72 69  r TRUNCATE.  Wri
2fa60 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d  te 1 or 0 into m
2fa70 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68  em[P3] if the ch
2fa80 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73  eckpoint returns
2fa90 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
2faa0 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69  or not, respecti
2fab0 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65  vely.  Write the
2fac0 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
2fad0 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61   in the.** WAL a
2fae0 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
2faf0 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b  int into mem[P3+
2fb00 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65  1] and the numbe
2fb10 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e  r of pages.** in
2fb20 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68 61   the WAL that ha
2fb30 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69  ve been checkpoi
2fb40 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20 63  nted after the c
2fb50 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d  heckpoint.** com
2fb60 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b  pletes into mem[
2fb70 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20  P3+2].  However 
2fb80 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d  on an error, mem
2fb90 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65  [P3+1] and.** me
2fba0 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74  m[P3+2] are init
2fbb0 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a  ialized to -1..*
2fbc0 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70  /.case OP_Checkp
2fbd0 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  oint: {.  int i;
2fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
2fc00 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
2fc10 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20  nt aRes[3];     
2fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2fc30 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d  * Results */.  M
2fc40 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
2fc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2fc60 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73 20  * Write results 
2fc70 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72  here */..  asser
2fc80 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2fc90 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d  0 );.  aRes[0] =
2fca0 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20   0;.  aRes[1] = 
2fcb0 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20  aRes[2] = -1;.  
2fcc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
2fcd0 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
2fce0 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20  NT_PASSIVE.     
2fcf0 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
2fd00 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2fd10 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70  FULL.       || p
2fd20 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
2fd30 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52  HECKPOINT_RESTAR
2fd40 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d  T.       || pOp-
2fd50 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
2fd60 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 0a  KPOINT_TRUNCATE.
2fd70 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69    );.  rc = sqli
2fd80 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62  te3Checkpoint(db
2fd90 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2fda0 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61  p2, &aRes[1], &a
2fdb0 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72  Res[2]);.  if( r
2fdc0 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
2fdd0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
2fde0 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30  E_OK;.    aRes[0
2fdf0 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72  ] = 1;.  }.  for
2fe00 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d  (i=0, pMem = &aM
2fe10 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33  em[pOp->p3]; i<3
2fe20 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a  ; i++, pMem++){.
2fe30 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2fe40 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c  emSetInt64(pMem,
2fe50 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a   (i64)aRes[i]);.
2fe60 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b    }    .  break;
2fe70 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69  .};  .#endif..#i
2fe80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2fe90 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f  T_PRAGMA./* Opco
2fea0 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20  de: JournalMode 
2feb0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2fec0 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f  ** Change the jo
2fed0 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61  urnal mode of da
2fee0 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e  tabase P1 to P3.
2fef0 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20   P3 must be one 
2ff00 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f  of the.** PAGER_
2ff10 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20  JOURNALMODE_XXX 
2ff20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67  values. If chang
2ff30 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65 20  ing between the 
2ff40 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b  various rollback
2ff50 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74  .** modes (delet
2ff60 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72  e, truncate, per
2ff70 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65  sist, off and me
2ff80 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20 61  mory), this is a
2ff90 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61   simple.** opera
2ffa0 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72  tion. No IO is r
2ffb0 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  equired..**.** I
2ffc0 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20  f changing into 
2ffd0 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f  or out of WAL mo
2ffe0 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72 65  de the procedure
2fff0 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63   is more complic
30000 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74  ated..**.** Writ
30010 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  e a string conta
30020 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20  ining the final 
30030 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20  journal-mode to 
30040 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
30050 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d  case OP_JournalM
30060 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74  ode: {    /* out
30070 32 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  2 */.  Btree *pB
30080 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
30090 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20         /* Btree 
300a0 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61  to change journa
300b0 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50  l mode of */.  P
300c0 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20  ager *pPager;   
300d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
300e0 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74  * Pager associat
300f0 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20  ed with pBt */. 
30100 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20   int eNew;      
30110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30120 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20   /* New journal 
30130 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f  mode */.  int eO
30140 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ld;             
30150 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
30160 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   old journal mod
30170 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e */.#ifndef SQL
30180 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63  ITE_OMIT_WAL.  c
30190 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
301a0 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  name;          /
301b0 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
301c0 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67  se file for pPag
301d0 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20  er */.#endif..  
301e0 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
301f0 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
30200 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b   eNew = pOp->p3;
30210 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d  .  assert( eNew=
30220 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
30230 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20  DE_DELETE .     
30240 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
30250 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55  _JOURNALMODE_TRU
30260 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  NCATE .       ||
30270 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
30280 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54  RNALMODE_PERSIST
30290 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
302a0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
302b0 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c  ODE_OFF.       |
302c0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
302d0 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
302e0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
302f0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
30300 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c  DE_WAL.       ||
30310 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
30320 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20  RNALMODE_QUERY. 
30330 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
30340 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
30350 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
30360 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
30370 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42  Only==0 );..  pB
30380 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
30390 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67  >p1].pBt;.  pPag
303a0 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
303b0 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65  ePager(pBt);.  e
303c0 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67  Old = sqlite3Pag
303d0 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erGetJournalMode
303e0 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20  (pPager);.  if( 
303f0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
30400 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20  NALMODE_QUERY ) 
30410 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69  eNew = eOld;.  i
30420 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65 72  f( !sqlite3Pager
30430 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61  OkToChangeJourna
30440 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29 20  lMode(pPager) ) 
30450 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69  eNew = eOld;..#i
30460 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30470 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d  T_WAL.  zFilenam
30480 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
30490 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c  Filename(pPager,
304a0 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f   1);..  /* Do no
304b0 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69  t allow a transi
304c0 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f  tion to journal_
304d0 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64  mode=WAL for a d
304e0 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20  atabase.  ** in 
304f0 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67  temporary storag
30500 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20  e or if the VFS 
30510 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
30520 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a   shared memory .
30530 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d    */.  if( eNew=
30540 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
30550 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71  DE_WAL.   && (sq
30560 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46  lite3Strlen30(zF
30570 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20  ilename)==0     
30580 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69        /* Temp fi
30590 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20  le */.       || 
305a0 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c  !sqlite3PagerWal
305b0 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72  Supported(pPager
305c0 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65  ))   /* No share
305d0 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74  d-memory support
305e0 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65   */.  ){.    eNe
305f0 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20  w = eOld;.  }.. 
30600 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64   if( (eNew!=eOld
30610 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50  ).   && (eOld==P
30620 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
30630 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41  _WAL || eNew==PA
30640 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
30650 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66  WAL).  ){.    if
30660 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
30670 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65  t || db->nVdbeRe
30680 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63  ad>1 ){.      rc
30690 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
306a0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
306b0 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20  beError(p,.     
306c0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61       "cannot cha
306d0 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20  nge %s wal mode 
306e0 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
306f0 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20  ansaction",.    
30700 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47        (eNew==PAG
30710 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
30720 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f  AL ? "into" : "o
30730 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b  ut of").      );
30740 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
30750 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20    }else{. .     
30760 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52   if( eOld==PAGER
30770 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
30780 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
30790 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f  f leaving WAL mo
307a0 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f  de, close the lo
307b0 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65  g file. If succe
307c0 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a  ssful, the call.
307d0 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61          ** to Pa
307e0 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68  gerCloseWal() ch
307f0 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65  eckpoints and de
30800 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65 2d  letes the write-
30810 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20  ahead-log .     
30820 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45     ** file. An E
30830 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61  XCLUSIVE lock ma
30840 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20  y still be held 
30850 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
30860 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a  file .        **
30870 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73 73   after a success
30880 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20  ful return. .   
30890 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
308a0 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  rc = sqlite3Page
308b0 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72  rCloseWal(pPager
308c0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
308d0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
308e0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
308f0 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
30900 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65  Mode(pPager, eNe
30910 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  w);.        }.  
30920 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f      }else if( eO
30930 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
30940 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a  LMODE_MEMORY ){.
30950 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f          /* Canno
30960 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72  t transition dir
30970 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52  ectly from MEMOR
30980 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d  Y to WAL.  Use m
30990 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20  ode OFF.        
309a0 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65  ** as an interme
309b0 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20  diate */.       
309c0 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
309d0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
309e0 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  er, PAGER_JOURNA
309f0 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20  LMODE_OFF);.    
30a00 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
30a10 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69  Open a transacti
30a20 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  on on the databa
30a30 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c  se file. Regardl
30a40 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e  ess of the journ
30a50 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65  al.      ** mode
30a60 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  , this transacti
30a70 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20 61  on always uses a
30a80 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
30a90 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
30aa0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
30ab0 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
30ac0 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  pBt)==0 );.     
30ad0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
30ae0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
30af0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
30b00 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28  etVersion(pBt, (
30b10 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
30b20 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20  NALMODE_WAL ? 2 
30b30 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20  : 1));.      }. 
30b40 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20     }.  }.#endif 
30b50 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /* ifndef SQLITE
30b60 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20  _OMIT_WAL */..  
30b70 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 65 4e  if( rc ){.    eN
30b80 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20  ew = eOld;.  }. 
30b90 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50   eNew = sqlite3P
30ba0 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
30bb0 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29  de(pPager, eNew)
30bc0 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  ;..  pOut->flags
30bd0 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
30be0 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
30bf0 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61    pOut->z = (cha
30c00 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e  r *)sqlite3Journ
30c10 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29  alModename(eNew)
30c20 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71  ;.  pOut->n = sq
30c30 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f  lite3Strlen30(pO
30c40 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e  ut->z);.  pOut->
30c50 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
30c60 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  8;.  sqlite3Vdbe
30c70 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
30c80 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Out, encoding);.
30c90 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64    break;.};.#end
30ca0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
30cb0 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66  T_PRAGMA */..#if
30cc0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
30cd0 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26  _OMIT_VACUUM) &&
30ce0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
30cf0 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a  _OMIT_ATTACH)./*
30d00 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20   Opcode: Vacuum 
30d10 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
30d20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72  Vacuum the entir
30d30 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69  e database.  Thi
30d40 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61  s opcode will ca
30d50 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75 61  use other virtua
30d60 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f  l.** machines to
30d70 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64 20   be created and 
30d80 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74  run.  It may not
30d90 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   be called from 
30da0 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e  within.** a tran
30db0 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  saction..*/.case
30dc0 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20   OP_Vacuum: {.  
30dd0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
30de0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  nly==0 );.  rc =
30df0 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
30e00 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  m(&p->zErrMsg, d
30e10 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  b);.  break;.}.#
30e20 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69  endif..#if !defi
30e30 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
30e40 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f  AUTOVACUUM)./* O
30e50 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75  pcode: IncrVacuu
30e60 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
30e70 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69  .** Perform a si
30e80 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65  ngle step of the
30e90 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63   incremental vac
30ea0 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e  uum procedure on
30eb0 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62  .** the P1 datab
30ec0 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75  ase. If the vacu
30ed0 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c  um has finished,
30ee0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
30ef0 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65  tion.** P2. Othe
30f00 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
30f10 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
30f20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
30f30 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75  case OP_IncrVacu
30f40 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  um: {        /* 
30f50 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20  jump */.  Btree 
30f60 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pBt;..  assert(
30f70 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
30f80 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
30f90 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
30fa0 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
30fb0 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b  ask, pOp->p1) );
30fc0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
30fd0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
30fe0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
30ff0 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20  ->p1].pBt;.  rc 
31000 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
31010 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20  crVacuum(pBt);. 
31020 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
31030 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45  (rc==SQLITE_DONE
31040 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  ,2);.  if( rc==S
31050 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20  QLITE_DONE ){.  
31060 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
31070 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  ;.    goto jump_
31080 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
31090 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
310a0 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20   Opcode: Expire 
310b0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
310c0 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c   Cause precompil
310d0 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  ed statements to
310e0 20 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61   expire.  When a
310f0 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
31100 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ent.** is execut
31110 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ed using sqlite3
31120 5f 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20  _step() it will 
31130 65 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63  either automatic
31140 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72  ally.** reprepar
31150 65 20 69 74 73 65 6c 66 20 28 69 66 20 69 74 20  e itself (if it 
31160 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63  was originally c
31170 72 65 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c  reated using sql
31180 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
31190 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c  )).** or it will
311a0 20 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54   fail with SQLIT
311b0 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a  E_SCHEMA..** .**
311c0 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65   If P1 is 0, the
311d0 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d  n all SQL statem
311e0 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69  ents become expi
311f0 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f  red. If P1 is no
31200 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20  n-zero,.** then 
31210 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74  only the current
31220 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61  ly executing sta
31230 74 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65  tement is expire
31240 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78  d..*/.case OP_Ex
31250 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70  pire: {.  if( !p
31260 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
31270 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
31280 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
31290 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
312a0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
312b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
312c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
312d0 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
312e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c  ./* Opcode: Tabl
312f0 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50  eLock P1 P2 P3 P
31300 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
31310 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20   iDb=P1 root=P2 
31320 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  write=P3.**.** O
31330 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
31340 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
31350 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
31360 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
31370 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
31380 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
31390 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
313a0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
313b0 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
313c0 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33  abase in sqlite3
313d0 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61  .aDb[] of the da
313e0 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69  tabase.** on whi
313f0 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61  ch the lock is a
31400 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64  cquired.  A read
31410 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
31420 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20   if P3==0 or.** 
31430 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20  a write lock if 
31440 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  P3==1..**.** P2 
31450 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
31460 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  t-page of the ta
31470 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a  ble to lock..**.
31480 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  ** P4 contains a
31490 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
314a0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
314b0 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20  e being locked. 
314c0 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20  This is only.** 
314d0 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
314e0 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
314f0 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61  e if the lock ca
31500 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
31510 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62  ..*/.case OP_Tab
31520 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69  leLock: {.  u8 i
31530 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38  sWriteLock = (u8
31540 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20  )pOp->p3;.  if( 
31550 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30  isWriteLock || 0
31560 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  ==(db->flags&SQL
31570 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
31580 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20  ted) ){.    int 
31590 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20  p1 = pOp->p1; . 
315a0 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30     assert( p1>=0
315b0 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29   && p1<db->nDb )
315c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62  ;.    assert( Db
315d0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
315e0 65 4d 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20  eMask, p1) );.  
315f0 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74    assert( isWrit
31600 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72  eLock==0 || isWr
31610 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20  iteLock==1 );.  
31620 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
31630 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d  reeLockTable(db-
31640 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f  >aDb[p1].pBt, pO
31650 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f  p->p2, isWriteLo
31660 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63  ck);.    if( (rc
31670 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c  &0xFF)==SQLITE_L
31680 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63  OCKED ){.      c
31690 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70  onst char *z = p
316a0 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20  Op->p4.z;.      
316b0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
316c0 28 70 2c 20 22 64 61 74 61 62 61 73 65 20 74 61  (p, "database ta
316d0 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25  ble is locked: %
316e0 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  s", z);.    }.  
316f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
31700 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
31710 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20  IT_SHARED_CACHE 
31720 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
31730 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
31740 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
31750 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20  VBegin * * * P4 
31760 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  *.**.** P4 may b
31770 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  e a pointer to a
31780 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
31790 74 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c  tructure. If so,
317a0 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42   call the .** xB
317b0 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20  egin method for 
317c0 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  that table..**.*
317d0 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20  * Also, whether 
317e0 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74  or not P4 is set
317f0 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 69  , check that thi
31800 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63  s is not being c
31810 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69  alled from.** wi
31820 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20  thin a callback 
31830 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
31840 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f  le xSync() metho
31850 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68 65  d. If it is, the
31860 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77   error.** code w
31870 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51  ill be set to SQ
31880 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a  LITE_LOCKED..*/.
31890 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20  case OP_VBegin: 
318a0 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  {.  VTable *pVTa
318b0 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70  b;.  pVTab = pOp
318c0 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63  ->p4.pVtab;.  rc
318d0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42 65   = sqlite3VtabBe
318e0 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a  gin(db, pVTab);.
318f0 20 20 69 66 28 20 70 56 54 61 62 20 29 20 73 71    if( pVTab ) sq
31900 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
31910 72 72 6d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e  rrmsg(p, pVTab->
31920 70 56 74 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b  pVtab);.  break;
31930 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
31940 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
31950 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
31960 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
31970 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
31980 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31  code: VCreate P1
31990 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
319a0 50 32 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P2 is a register
319b0 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
319c0 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
319d0 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
319e0 61 73 65 20 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c  ase .** P1. Call
319f0 20 74 68 65 20 78 43 72 65 61 74 65 20 6d 65 74   the xCreate met
31a00 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
31a10 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  le..*/.case OP_V
31a20 43 72 65 61 74 65 3a 20 7b 0a 20 20 4d 65 6d 20  Create: {.  Mem 
31a30 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
31a40 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
31a50 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
31a60 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
31a70 74 20 63 68 61 72 20 2a 7a 54 61 62 3b 20 20 2f  t char *zTab;  /
31a80 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 76 69  * Name of the vi
31a90 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a  rtual table */..
31aa0 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
31ab0 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
31ac0 3b 0a 20 20 73 4d 65 6d 2e 64 62 20 3d 20 64 62  ;.  sMem.db = db
31ad0 3b 0a 20 20 2f 2a 20 42 65 63 61 75 73 65 20 50  ;.  /* Because P
31ae0 32 20 69 73 20 61 6c 77 61 79 73 20 61 20 73 74  2 is always a st
31af0 61 74 69 63 20 73 74 72 69 6e 67 2c 20 69 74 20  atic string, it 
31b00 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f  is impossible fo
31b10 72 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74  r the.  ** sqlit
31b20 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 29 20  e3VdbeMemCopy() 
31b30 74 6f 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73  to fail */.  ass
31b40 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e  ert( (aMem[pOp->
31b50 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  p2].flags & MEM_
31b60 53 74 72 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Str)!=0 );.  ass
31b70 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e  ert( (aMem[pOp->
31b80 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  p2].flags & MEM_
31b90 53 74 61 74 69 63 29 21 3d 30 20 29 3b 0a 20 20  Static)!=0 );.  
31ba0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
31bb0 4d 65 6d 43 6f 70 79 28 26 73 4d 65 6d 2c 20 26  MemCopy(&sMem, &
31bc0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
31bd0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
31be0 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61  LITE_OK );.  zTa
31bf0 62 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  b = (const char*
31c00 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
31c10 65 78 74 28 26 73 4d 65 6d 29 3b 0a 20 20 61 73  ext(&sMem);.  as
31c20 73 65 72 74 28 20 7a 54 61 62 20 7c 7c 20 64 62  sert( zTab || db
31c30 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
31c40 3b 0a 20 20 69 66 28 20 7a 54 61 62 20 29 7b 0a  ;.  if( zTab ){.
31c50 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
31c60 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64  VtabCallCreate(d
31c70 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a 54 61 62  b, pOp->p1, zTab
31c80 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  , &p->zErrMsg);.
31c90 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
31ca0 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
31cb0 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  m);.  break;.}.#
31cc0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
31cd0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
31ce0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
31cf0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
31d00 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
31d10 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
31d20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
31d30 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
31d40 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
31d50 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
31d60 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
31d70 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
31d80 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
31d90 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
31da0 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f  {.  db->nVDestro
31db0 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  y++;.  rc = sqli
31dc0 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
31dd0 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  oy(db, pOp->p1, 
31de0 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64 62  pOp->p4.z);.  db
31df0 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b 0a 20  ->nVDestroy--;. 
31e00 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
31e10 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
31e20 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
31e30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
31e40 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
31e50 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70  E./* Opcode: VOp
31e60 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  en P1 * * P4 *.*
31e70 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
31e80 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
31e90 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
31ea0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
31eb0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31  structure..** P1
31ec0 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d   is a cursor num
31ed0 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ber.  This opcod
31ee0 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72  e opens a cursor
31ef0 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a   to the virtual.
31f00 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f  ** table and sto
31f10 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20  res that cursor 
31f20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P1..*/.case O
31f30 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  P_VOpen: {.  Vdb
31f40 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
31f50 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
31f60 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
31f70 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
31f80 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
31f90 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
31fa0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73   *pModule;..  as
31fb0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
31fc0 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30  er );.  pCur = 0
31fd0 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20  ;.  pVtabCursor 
31fe0 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  = 0;.  pVtab = p
31ff0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
32000 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62  tab;.  if( pVtab
32010 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74  ==0 || NEVER(pVt
32020 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20  ab->pModule==0) 
32030 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
32040 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 62  TE_LOCKED;.    b
32050 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64  reak;.  }.  pMod
32060 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
32070 64 75 6c 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f  dule;.  rc = pMo
32080 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61  dule->xOpen(pVta
32090 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72 29  b, &pVtabCursor)
320a0 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
320b0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
320c0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53 51 4c  Vtab);.  if( SQL
320d0 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20  ITE_OK==rc ){.  
320e0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
320f0 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
32100 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a  sor base class *
32110 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72 73 6f  /.    pVtabCurso
32120 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62  r->pVtab = pVtab
32130 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ;..    /* Initia
32140 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f 72  lize vdbe cursor
32150 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70   object */.    p
32160 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
32170 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
32180 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20   0, -1, 0);.    
32190 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20  if( pCur ){.    
321a0 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72    pCur->pVtabCur
321b0 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f  sor = pVtabCurso
321c0 72 3b 0a 20 20 20 20 20 20 70 56 74 61 62 2d 3e  r;.      pVtab->
321d0 6e 52 65 66 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73  nRef++;.    }els
321e0 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
321f0 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
32200 64 20 29 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75  d );.      pModu
32210 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62  le->xClose(pVtab
32220 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 67  Cursor);.      g
32230 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
32240 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
32250 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
32260 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
32270 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
32280 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
32290 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
322a0 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50  de: VFilter P1 P
322b0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
322c0 6f 70 73 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50  opsis: iplan=r[P
322d0 33 5d 20 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a  3] zplan='P4'.**
322e0 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
322f0 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  or opened using 
32300 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e  VOpen.  P2 is an
32310 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70   address to jump
32320 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69   to if.** the fi
32330 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20 73 65  ltered result se
32340 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a  t is empty..**.*
32350 2a 20 50 34 20 69 73 20 65 69 74 68 65 72 20 4e  * P4 is either N
32360 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20  ULL or a string 
32370 74 68 61 74 20 77 61 73 20 67 65 6e 65 72 61 74  that was generat
32380 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74 49  ed by the xBestI
32390 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f  ndex.** method o
323a0 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54  f the module.  T
323b0 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  he interpretatio
323c0 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74 72 69  n of the P4 stri
323d0 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f  ng is left.** to
323e0 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   the module impl
323f0 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ementation..**.*
32400 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
32410 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65  vokes the xFilte
32420 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20  r method on the 
32430 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70  virtual table sp
32440 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31  ecified.** by P1
32450 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20 71  .  The integer q
32460 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65  uery plan parame
32470 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69  ter to xFilter i
32480 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
32490 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69  ster.** P3. Regi
324a0 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73  ster P3+1 stores
324b0 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d 65   the argc parame
324c0 74 65 72 20 74 6f 20 62 65 20 70 61 73 73 65 64  ter to be passed
324d0 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74   to the.** xFilt
324e0 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73  er method. Regis
324f0 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b  ters P3+2..P3+1+
32500 61 72 67 63 20 61 72 65 20 74 68 65 20 61 72 67  argc are the arg
32510 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20  c.** additional 
32520 70 61 72 61 6d 65 74 65 72 73 20 77 68 69 63 68  parameters which
32530 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a   are passed to.*
32540 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61 72 67  * xFilter as arg
32550 76 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 32  v. Register P3+2
32560 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d   becomes argv[0]
32570 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20   when passed to 
32580 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41  xFilter..**.** A
32590 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
325a0 20 50 32 20 69 66 20 74 68 65 20 72 65 73 75 6c   P2 if the resul
325b0 74 20 73 65 74 20 61 66 74 65 72 20 66 69 6c 74  t set after filt
325c0 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65  ering would be e
325d0 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  mpty..*/.case OP
325e0 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a  _VFilter: {   /*
325f0 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
32600 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72  Arg;.  int iQuer
32610 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  y;.  const sqlit
32620 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
32630 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72  le;.  Mem *pQuer
32640 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b  y;.  Mem *pArgc;
32650 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
32660 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72  cursor *pVtabCur
32670 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  sor;.  sqlite3_v
32680 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64  tab *pVtab;.  Vd
32690 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
326a0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
326b0 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72   i;.  Mem **apAr
326c0 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26  g;..  pQuery = &
326d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
326e0 20 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79   pArgc = &pQuery
326f0 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  [1];.  pCur = p-
32700 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
32710 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
32720 56 61 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b  Valid(pQuery) );
32730 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
32740 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72  E(pOp->p3, pQuer
32750 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  y);.  assert( pC
32760 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
32770 29 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72  );.  pVtabCursor
32780 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
32790 72 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d 20  rsor;.  pVtab = 
327a0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
327b0 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
327c0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
327d0 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69  .  /* Grab the i
327e0 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20  ndex number and 
327f0 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 73 20  argc parameters 
32800 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 51  */.  assert( (pQ
32810 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  uery->flags&MEM_
32820 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67 63  Int)!=0 && pArgc
32830 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
32840 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e   );.  nArg = (in
32850 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20  t)pArgc->u.i;.  
32860 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51  iQuery = (int)pQ
32870 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a  uery->u.i;..  /*
32880 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c   Invoke the xFil
32890 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  ter method */.  
328a0 72 65 73 20 3d 20 30 3b 0a 20 20 61 70 41 72 67  res = 0;.  apArg
328b0 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 66   = p->apArg;.  f
328c0 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67  or(i = 0; i<nArg
328d0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 70 41 72  ; i++){.    apAr
328e0 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b  g[i] = &pArgc[i+
328f0 31 5d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70  1];.  }.  rc = p
32900 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28  Module->xFilter(
32910 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75  pVtabCursor, iQu
32920 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  ery, pOp->p4.z, 
32930 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20  nArg, apArg);.  
32940 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
32950 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
32960 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
32970 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
32980 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
32990 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  f(pVtabCursor);.
329a0 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c    }.  pCur->null
329b0 52 6f 77 20 3d 20 30 3b 0a 20 20 56 64 62 65 42  Row = 0;.  VdbeB
329c0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
329d0 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20  0,2);.  if( res 
329e0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
329f0 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  2;.  break;.}.#e
32a00 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
32a10 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
32a20 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
32a30 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
32a40 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
32a50 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50   VColumn P1 P2 P
32a60 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
32a70 73 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e  s: r[P3]=vcolumn
32a80 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  (P2).**.** Store
32a90 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
32aa0 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  e P2-th column o
32ab0 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20  f.** the row of 
32ac0 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c  the virtual-tabl
32ad0 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50  e that the .** P
32ae0 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e  1 cursor is poin
32af0 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67  ting to into reg
32b00 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73  ister P3..*/.cas
32b10 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a  e OP_VColumn: {.
32b20 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
32b30 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
32b40 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
32b50 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70  Module;.  Mem *p
32b60 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Dest;.  sqlite3_
32b70 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74  context sContext
32b80 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  ;..  VdbeCursor 
32b90 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72  *pCur = p->apCsr
32ba0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
32bb0 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62  ert( pCur->pVtab
32bc0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
32bd0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
32be0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
32bf0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
32c00 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
32c10 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
32c20 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
32c30 2c 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20  , pDest);.  if( 
32c40 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
32c50 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
32c60 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
32c70 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
32c80 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
32c90 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
32ca0 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
32cb0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
32cc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
32cd0 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a  ule->xColumn );.
32ce0 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65    memset(&sConte
32cf0 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43  xt, 0, sizeof(sC
32d00 6f 6e 74 65 78 74 29 29 3b 0a 20 20 73 43 6f 6e  ontext));.  sCon
32d10 74 65 78 74 2e 70 4f 75 74 20 3d 20 70 44 65 73  text.pOut = pDes
32d20 74 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  t;.  MemSetTypeF
32d30 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e  lag(pDest, MEM_N
32d40 75 6c 6c 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f  ull);.  rc = pMo
32d50 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43  dule->xColumn(pC
32d60 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c  ur->pVtabCursor,
32d70 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d   &sContext, pOp-
32d80 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2);.  sqlite3V
32d90 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
32da0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
32db0 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
32dc0 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43  r ){.    rc = sC
32dd0 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a  ontext.isError;.
32de0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
32df0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
32e00 70 44 65 73 74 2c 20 65 6e 63 6f 64 69 6e 67 29  pDest, encoding)
32e10 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
32e20 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73  CE(pOp->p3, pDes
32e30 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
32e40 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
32e50 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ;..  if( sqlite3
32e60 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44  VdbeMemTooBig(pD
32e70 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  est) ){.    goto
32e80 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
32e90 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
32ea0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
32eb0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
32ec0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
32ed0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
32ee0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78  ./* Opcode: VNex
32ef0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
32f00 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74  .** Advance virt
32f10 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20  ual table P1 to 
32f20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20  the next row in 
32f30 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 61  its result set a
32f40 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e  nd.** jump to in
32f50 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f  struction P2.  O
32f60 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75 61  r, if the virtua
32f70 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61 63  l table has reac
32f80 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f  hed.** the end o
32f90 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  f its result set
32fa0 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
32fb0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
32fc0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
32fd0 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b  case OP_VNext: {
32fe0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
32ff0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
33000 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
33010 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
33020 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b  dule;.  int res;
33030 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
33040 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b  Cur;..  res = 0;
33050 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
33060 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
33070 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
33080 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  abCursor );.  if
33090 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
330a0 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
330b0 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
330c0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
330d0 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
330e0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
330f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
33100 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20  ule->xNext );.. 
33110 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
33120 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66  Next() method of
33130 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65   the module. The
33140 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72  re is no way for
33150 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c   the.  ** underl
33160 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ying implementat
33170 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e  ion to return an
33180 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63   error if one oc
33190 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a  curs during.  **
331a0 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61   xNext(). Instea
331b0 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f  d, if an error o
331c0 63 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72  ccurs, true is r
331d0 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74  eturned (indicat
331e0 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64  ing that .  ** d
331f0 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ata is available
33200 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20  ) and the error 
33210 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68  code returned wh
33220 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20  en xColumn or.  
33230 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65  ** some other me
33240 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76  thod is next inv
33250 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65  oked on the save
33260 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
33270 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 72 63  ursor..  */.  rc
33280 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78   = pModule->xNex
33290 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  t(pCur->pVtabCur
332a0 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  sor);.  sqlite3V
332b0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
332c0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
332d0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
332e0 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64  {.    res = pMod
332f0 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e  ule->xEof(pCur->
33300 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
33310 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
33320 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20 69  ken(!res,2);.  i
33330 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f  f( !res ){.    /
33340 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61  * If there is da
33350 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a  ta, jump to P2 *
33360 2f 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  /.    goto jump_
33370 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f  to_p2_and_check_
33380 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  for_interrupt;. 
33390 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f   }.  goto check_
333a0 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
333b0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
333c0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
333d0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
333e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
333f0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
33400 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a  de: VRename P1 *
33410 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
33420 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
33430 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
33440 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
33450 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
33460 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  re..** This opco
33470 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63  de invokes the c
33480 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65  orresponding xRe
33490 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65  name method. The
334a0 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67   value.** in reg
334b0 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73 73  ister P1 is pass
334c0 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20  ed as the zName 
334d0 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
334e0 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a  xRename method..
334f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61  */.case OP_VRena
33500 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  me: {.  sqlite3_
33510 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d  vtab *pVtab;.  M
33520 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56  em *pName;..  pV
33530 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
33540 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e  tab->pVtab;.  pN
33550 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ame = &aMem[pOp-
33560 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
33570 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e  pVtab->pModule->
33580 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73  xRename );.  ass
33590 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
335a0 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73 65  pName) );.  asse
335b0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
335c0 3d 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  =0 );.  REGISTER
335d0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
335e0 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74  pName);.  assert
335f0 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26  ( pName->flags &
33600 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65   MEM_Str );.  te
33610 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
33620 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  nc==SQLITE_UTF8 
33630 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
33640 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
33650 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74  E_UTF16BE );.  t
33660 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
33670 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
33680 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  6LE );.  rc = sq
33690 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
336a0 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53  ncoding(pName, S
336b0 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69  QLITE_UTF8);.  i
336c0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
336d0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 70 56 74   ){.    rc = pVt
336e0 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
336f0 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d  name(pVtab, pNam
33700 65 2d 3e 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74  e->z);.    sqlit
33710 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
33720 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
33730 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
33740 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
33750 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
33760 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
33770 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
33780 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31 20  ode: VUpdate P1 
33790 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
337a0 79 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d 72 5b  ynopsis: data=r[
337b0 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20  P3@P2].**.** P4 
337c0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
337d0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
337e0 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
337f0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
33800 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  e..** This opcod
33810 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f  e invokes the co
33820 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64  rresponding xUpd
33830 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76  ate method. P2 v
33840 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e  alues.** are con
33850 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63  tiguous memory c
33860 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74  ells starting at
33870 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74   P3 to pass to t
33880 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69  he xUpdate .** i
33890 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76  nvocation. The v
338a0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
338b0 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65   (P3+P2-1) corre
338c0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a  sponds to the .*
338d0 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f  * p2th element o
338e0 66 20 74 68 65 20 61 72 67 76 20 61 72 72 61 79  f the argv array
338f0 20 70 61 73 73 65 64 20 74 6f 20 78 55 70 64 61   passed to xUpda
33900 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55  te..**.** The xU
33910 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c  pdate method wil
33920 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72  l do a DELETE or
33930 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f   an INSERT or bo
33940 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b  th..** The argv[
33950 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63  0] element (whic
33960 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  h corresponds to
33970 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29   memory cell P3)
33980 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64  .** is the rowid
33990 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c   of a row to del
339a0 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d  ete.  If argv[0]
339b0 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f   is NULL then no
339c0 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63   .** deletion oc
339d0 63 75 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b  curs.  The argv[
339e0 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68  1] element is th
339f0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e  e rowid of the n
33a00 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69  ew .** row.  Thi
33a10 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f  s can be NULL to
33a20 20 68 61 76 65 20 74 68 65 20 76 69 72 74 75 61   have the virtua
33a30 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74  l table select t
33a40 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64  he new .** rowid
33a50 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68   for itself.  Th
33a60 65 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65  e subsequent ele
33a70 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72  ments in the arr
33a80 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76  ay are .** the v
33a90 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73  alues of columns
33aa0 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e   in the new row.
33ab0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20  .**.** If P2==1 
33ac0 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69  then no insert i
33ad0 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72  s performed.  ar
33ae0 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77  gv[0] is the row
33af0 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74  id of.** a row t
33b00 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20  o delete..**.** 
33b10 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20  P1 is a boolean 
33b20 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20 73  flag. If it is s
33b30 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74  et to true and t
33b40 68 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a  he xUpdate call.
33b50 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66 75 6c  ** is successful
33b60 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
33b70 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
33b80 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
33b90 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20  _rowid() .** is 
33ba0 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
33bb0 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f   of the rowid fo
33bc0 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69  r the row just i
33bd0 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  nserted..**.** P
33be0 35 20 69 73 20 74 68 65 20 65 72 72 6f 72 20 61  5 is the error a
33bf0 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61  ctions (OE_Repla
33c00 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f  ce, OE_Fail, OE_
33c10 49 67 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a  Ignore, etc) to.
33c20 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74 68 65 20  ** apply in the 
33c30 63 61 73 65 20 6f 66 20 61 20 63 6f 6e 73 74 72  case of a constr
33c40 61 69 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e 20  aint failure on 
33c50 61 6e 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64  an insert or upd
33c60 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ate..*/.case OP_
33c70 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c  VUpdate: {.  sql
33c80 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
33c90 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
33ca0 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
33cb0 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  e;.  int nArg;. 
33cc0 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65   int i;.  sqlite
33cd0 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20  _int64 rowid;.  
33ce0 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d  Mem **apArg;.  M
33cf0 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72  em *pX;..  asser
33d00 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20  t( pOp->p2==1   
33d10 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d       || pOp->p5=
33d20 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f  =OE_Fail   || pO
33d30 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  p->p5==OE_Rollba
33d40 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ck .       || pO
33d50 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20  p->p5==OE_Abort 
33d60 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49  || pOp->p5==OE_I
33d70 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35  gnore || pOp->p5
33d80 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20 29  ==OE_Replace.  )
33d90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
33da0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
33db0 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
33dc0 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
33dd0 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20  if( pVtab==0 || 
33de0 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f  NEVER(pVtab->pMo
33df0 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20  dule==0) ){.    
33e00 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
33e10 45 44 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ED;.    break;. 
33e20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70   }.  pModule = p
33e30 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
33e40 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b   nArg = pOp->p2;
33e50 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
33e60 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20  p4type==P4_VTAB 
33e70 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
33e80 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65  pModule->xUpdate
33e90 29 20 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62  ) ){.    u8 vtab
33ea0 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d  OnConflict = db-
33eb0 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b  >vtabOnConflict;
33ec0 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e  .    apArg = p->
33ed0 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20  apArg;.    pX = 
33ee0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
33ef0 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
33f00 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
33f10 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
33f20 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20  lid(pX) );.     
33f30 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
33f40 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20  e(p, pX);.      
33f50 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20  apArg[i] = pX;. 
33f60 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d       pX++;.    }
33f70 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43  .    db->vtabOnC
33f80 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70  onflict = pOp->p
33f90 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  5;.    rc = pMod
33fa0 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74  ule->xUpdate(pVt
33fb0 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c  ab, nArg, apArg,
33fc0 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62   &rowid);.    db
33fd0 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
33fe0 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63   = vtabOnConflic
33ff0 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  t;.    sqlite3Vt
34000 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
34010 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
34020 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
34030 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  && pOp->p1 ){.  
34040 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67      assert( nArg
34050 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26  >1 && apArg[0] &
34060 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61  & (apArg[0]->fla
34070 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a  gs&MEM_Null) );.
34080 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f        db->lastRo
34090 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20  wid = lastRowid 
340a0 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
340b0 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29     if( (rc&0xff)
340c0 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
340d0 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70  INT && pOp->p4.p
340e0 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e  Vtab->bConstrain
340f0 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  t ){.      if( p
34100 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p5==OE_Ignor
34110 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  e ){.        rc 
34120 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
34130 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
34140 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
34150 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45   = ((pOp->p5==OE
34160 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41  _Replace) ? OE_A
34170 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b  bort : pOp->p5);
34180 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
34190 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68  se{.      p->nCh
341a0 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  ange++;.    }.  
341b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
341c0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
341d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
341e0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c  */..#ifndef  SQL
341f0 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
34200 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65  RAGMAS./* Opcode
34210 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50  : Pagecount P1 P
34220 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
34230 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ite the current 
34240 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
34250 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 74  in database P1 t
34260 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32  o memory cell P2
34270 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67  ..*/.case OP_Pag
34280 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  ecount: {       
34290 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
342a0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
342b0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
342c0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73  .  pOut->u.i = s
342d0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50  qlite3BtreeLastP
342e0 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  age(db->aDb[pOp-
342f0 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65  >p1].pBt);.  bre
34300 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23  ak;.}.#endif...#
34310 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f  ifndef  SQLITE_O
34320 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
34330 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78  S./* Opcode: Max
34340 50 67 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a  Pgcnt P1 P2 P3 *
34350 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20   *.**.** Try to 
34360 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  set the maximum 
34370 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64  page count for d
34380 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 74 68  atabase P1 to th
34390 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a  e value in P3..*
343a0 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65  * Do not let the
343b0 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
343c0 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74  unt fall below t
343d0 68 65 20 63 75 72 72 65 6e 74 20 70 61 67 65 20  he current page 
343e0 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20  count and.** do 
343f0 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d  not change the m
34400 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
34410 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30  t value if P3==0
34420 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ..**.** Store th
34430 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
34440 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65 20 63  ount after the c
34450 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65  hange in registe
34460 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
34470 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20  _MaxPgcnt: {    
34480 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
34490 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
344a0 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72 65  t newMax;.  Btre
344b0 65 20 2a 70 42 74 3b 0a 0a 20 20 70 4f 75 74 20  e *pBt;..  pOut 
344c0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
344d0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 42 74 20  (p, pOp);.  pBt 
344e0 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
344f0 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78  1].pBt;.  newMax
34500 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d   = 0;.  if( pOp-
34510 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61  >p3 ){.    newMa
34520 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  x = sqlite3Btree
34530 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b 0a 20  LastPage(pBt);. 
34540 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20 3c 20     if( newMax < 
34550 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70  (unsigned)pOp->p
34560 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e  3 ) newMax = (un
34570 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a  signed)pOp->p3;.
34580 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
34590 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 61  = sqlite3BtreeMa
345a0 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74 2c 20  xPageCount(pBt, 
345b0 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b  newMax);.  break
345c0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  ;.}.#endif.../* 
345d0 4f 70 63 6f 64 65 3a 20 49 6e 69 74 20 2a 20 50  Opcode: Init * P
345e0 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
345f0 70 73 69 73 3a 20 20 53 74 61 72 74 20 61 74 20  psis:  Start at 
34600 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67 72 61 6d  P2.**.** Program
34610 73 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67  s contain a sing
34620 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  le instance of t
34630 68 69 73 20 6f 70 63 6f 64 65 20 61 73 20 74 68  his opcode as th
34640 65 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20  e very first.** 
34650 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  opcode..**.** If
34660 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62   tracing is enab
34670 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69  led (by the sqli
34680 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74  te3_trace()) int
34690 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20  erface, then.** 
346a0 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  the UTF-8 string
346b0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34   contained in P4
346c0 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74   is emitted on t
346d0 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63  he trace callbac
346e0 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20 50 34 20 69  k..** Or if P4 i
346f0 73 20 62 6c 61 6e 6b 2c 20 75 73 65 20 74 68 65  s blank, use the
34700 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
34710 20 62 79 20 73 71 6c 69 74 65 33 5f 73 71 6c 28   by sqlite3_sql(
34720 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69  )..**.** If P2 i
34730 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a 75 6d 70  s not zero, jump
34740 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
34750 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
34760 6e 69 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nit: {          
34770 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 63 68 61  /* jump */.  cha
34780 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68 61  r *zTrace;.  cha
34790 72 20 2a 7a 3b 0a 0a 23 69 66 6e 64 65 66 20 53  r *z;..#ifndef S
347a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
347b0 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63  .  if( db->xTrac
347c0 65 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e  e.   && !p->doin
347d0 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28 7a 54  gRerun.   && (zT
347e0 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e  race = (pOp->p4.
347f0 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20  z ? pOp->p4.z : 
34800 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29  p->zSql))!=0.  )
34810 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65  {.    z = sqlite
34820 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70  3VdbeExpandSql(p
34830 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 64  , zTrace);.    d
34840 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54  b->xTrace(db->pT
34850 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20  raceArg, z);.   
34860 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
34870 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65  b, z);.  }.#ifde
34880 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e  f SQLITE_USE_FCN
34890 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72 61 63  TL_TRACE.  zTrac
348a0 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
348b0 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
348c0 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72  zSql);.  if( zTr
348d0 61 63 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  ace ){.    int i
348e0 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
348f0 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
34900 20 20 20 20 20 20 69 66 28 20 44 62 4d 61 73 6b        if( DbMask
34910 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
34920 6b 2c 20 69 29 3d 3d 30 20 29 20 63 6f 6e 74 69  k, i)==0 ) conti
34930 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  nue;.      sqlit
34940 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
34950 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  db, db->aDb[i].z
34960 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e  Name, SQLITE_FCN
34970 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61 63 65  TL_TRACE, zTrace
34980 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  );.    }.  }.#en
34990 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53  dif /* SQLITE_US
349a0 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f  E_FCNTL_TRACE */
349b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
349c0 45 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d 3e  EBUG.  if( (db->
349d0 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53  flags & SQLITE_S
349e0 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20 20 26  qlTrace)!=0.   &
349f0 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  & (zTrace = (pOp
34a00 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
34a10 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d  .z : p->zSql))!=
34a20 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  0.  ){.    sqlit
34a30 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22 53  e3DebugPrintf("S
34a40 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c  QL-trace: %s\n",
34a50 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65   zTrace);.  }.#e
34a60 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
34a70 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  EBUG */.#endif /
34a80 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  * SQLITE_OMIT_TR
34a90 41 43 45 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ACE */.  if( pOp
34aa0 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ->p2 ) goto jump
34ab0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
34ac0 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
34ad0 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  Noop * * * * *.*
34ae0 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e  *.** Do nothing.
34af0 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69    This instructi
34b00 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66  on is often usef
34b10 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20  ul as a jump.** 
34b20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a  destination..*/.
34b30 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20  /*.** The magic 
34b40 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61  Explain opcode a
34b50 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64  re only inserted
34b60 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32   when explain==2
34b70 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f   (which.** is to
34b80 20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45 58   say when the EX
34b90 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
34ba0 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e   syntax is used.
34bb0 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ).** This opcode
34bc0 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61   records informa
34bd0 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70  tion from the op
34be0 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20  timizer.  It is 
34bf0 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  the.** the same 
34c00 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69  as a no-op.  Thi
34c10 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61  s opcodesnever a
34c20 70 70 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c  ppears in a real
34c30 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a   VM program..*/.
34c40 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20  default: {      
34c50 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72      /* This is r
34c60 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e  eally OP_Noop an
34c70 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a  d OP_Explain */.
34c80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
34c90 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c  pcode==OP_Noop |
34ca0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
34cb0 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62  P_Explain );.  b
34cc0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a  reak;.}../******
34cd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34ce0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34cf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34d00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34d10 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63  *******.** The c
34d20 61 73 65 73 20 6f 66 20 74 68 65 20 73 77 69 74  ases of the swit
34d30 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  ch statement abo
34d40 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f  ve this line sho
34d50 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e  uld all be inden
34d60 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63  ted.** by 6 spac
34d70 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66  es.  But the lef
34d80 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20  t-most 6 spaces 
34d90 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65  have been remove
34da0 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65  d to improve the
34db0 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e  .** readability.
34dc0 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e    From this poin
34dd0 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e  t on down, the n
34de0 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f  ormal indentatio
34df0 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72  n rules are.** r
34e00 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a  estored..*******
34e10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34e20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34e30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34e40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34e50 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23  ******/.    }..#
34e60 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
34e70 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75  LE.    {.      u
34e80 36 34 20 65 6e 64 54 69 6d 65 20 3d 20 73 71 6c  64 endTime = sql
34e90 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 20 20  ite3Hwtime();.  
34ea0 20 20 20 20 69 66 28 20 65 6e 64 54 69 6d 65 3e      if( endTime>
34eb0 73 74 61 72 74 20 29 20 70 4f 72 69 67 4f 70 2d  start ) pOrigOp-
34ec0 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64 54 69  >cycles += endTi
34ed0 6d 65 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20  me - start;.    
34ee0 20 20 70 4f 72 69 67 4f 70 2d 3e 63 6e 74 2b 2b    pOrigOp->cnt++
34ef0 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ;.    }.#endif..
34f00 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
34f10 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e  wing code adds n
34f20 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63  othing to the ac
34f30 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69  tual functionali
34f40 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  ty.    ** of the
34f50 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73   program.  It is
34f60 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74   only here for t
34f70 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67  esting and debug
34f80 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20  ging..    ** On 
34f90 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20  the other hand, 
34fa0 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55  it does burn CPU
34fb0 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69   cycles every ti
34fc0 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a  me through.    *
34fd0 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20  * the evaluator 
34fe0 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e  loop.  So we can
34ff0 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68   leave it out wh
35000 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66  en NDEBUG is def
35010 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
35020 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20  ndef NDEBUG.    
35030 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 26 61 4f  assert( pOp>=&aO
35040 70 5b 2d 31 5d 20 26 26 20 70 4f 70 3c 26 61 4f  p[-1] && pOp<&aO
35050 70 5b 70 2d 3e 6e 4f 70 2d 31 5d 20 29 3b 0a 0a  p[p->nOp-1] );..
35060 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
35070 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  BUG.    if( db->
35080 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
35090 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20  dbeTrace ){.    
350a0 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 70 72    if( rc!=0 ) pr
350b0 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e 22 2c 72  intf("rc=%d\n",r
350c0 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f  c);.      if( pO
350d0 72 69 67 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26  rigOp->opflags &
350e0 20 28 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b   (OPFLG_OUT2) ){
350f0 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65  .        registe
35100 72 54 72 61 63 65 28 70 4f 72 69 67 4f 70 2d 3e  rTrace(pOrigOp->
35110 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 72 69 67 4f  p2, &aMem[pOrigO
35120 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p2]);.      }
35130 0a 20 20 20 20 20 20 69 66 28 20 70 4f 72 69 67  .      if( pOrig
35140 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
35150 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20  FLG_OUT3 ){.    
35160 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
35170 65 28 70 4f 72 69 67 4f 70 2d 3e 70 33 2c 20 26  e(pOrigOp->p3, &
35180 61 4d 65 6d 5b 70 4f 72 69 67 4f 70 2d 3e 70 33  aMem[pOrigOp->p3
35190 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
351a0 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c  }.#endif  /* SQL
351b0 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e  ITE_DEBUG */.#en
351c0 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a  dif  /* NDEBUG *
351d0 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e  /.  }  /* The en
351e0 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29  d of the for(;;)
351f0 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20   loop the loops 
35200 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20  through opcodes 
35210 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72  */..  /* If we r
35220 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c  each this point,
35230 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65   it means that e
35240 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69  xecution is fini
35250 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61  shed with.  ** a
35260 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20  n error of some 
35270 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f  kind..  */.vdbe_
35280 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73  error_halt:.  as
35290 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d  sert( rc );.  p-
352a0 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74 65 73 74  >rc = rc;.  test
352b0 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f  case( sqlite3Glo
352c0 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d  balConfig.xLog!=
352d0 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c  0 );.  sqlite3_l
352e0 6f 67 28 72 63 2c 20 22 73 74 61 74 65 6d 65 6e  og(rc, "statemen
352f0 74 20 61 62 6f 72 74 73 20 61 74 20 25 64 3a 20  t aborts at %d: 
35300 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20 20 20 20  [%s] %s", .     
35310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
35320 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20  nt)(pOp - aOp), 
35330 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72  p->zSql, p->zErr
35340 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Msg);.  sqlite3V
35350 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66  dbeHalt(p);.  if
35360 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc==SQLITE_IOE
35370 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d  RR_NOMEM ) db->m
35380 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
35390 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45  .  rc = SQLITE_E
353a0 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65  RROR;.  if( rese
353b0 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30  tSchemaOnFault>0
353c0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
353d0 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62  esetOneSchema(db
353e0 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  , resetSchemaOnF
353f0 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20  ault-1);.  }..  
35400 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  /* This is the o
35410 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74  nly way out of t
35420 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20  his procedure.  
35430 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20  We have to.  ** 
35440 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65  release the mute
35450 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68  xes on btrees th
35460 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64  at were acquired
35470 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70   at the.  ** top
35480 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e  . */.vdbe_return
35490 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  :.  db->lastRowi
354a0 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
354b0 20 74 65 73 74 63 61 73 65 28 20 6e 56 6d 53 74   testcase( nVmSt
354c0 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e 61 43 6f  ep>0 );.  p->aCo
354d0 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
354e0 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d  TSTATUS_VM_STEP]
354f0 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74 65 70   += (int)nVmStep
35500 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c  ;.  sqlite3VdbeL
35510 65 61 76 65 28 70 29 3b 0a 20 20 72 65 74 75 72  eave(p);.  retur
35520 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  n rc;..  /* Jump
35530 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 73 74   to here if a st
35540 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72  ring or blob lar
35550 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f  ger than SQLITE_
35560 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20  MAX_LENGTH.  ** 
35570 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a  is encountered..
35580 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20    */.too_big:.  
35590 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
355a0 28 70 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62  (p, "string or b
355b0 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20  lob too big");. 
355c0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f   rc = SQLITE_TOO
355d0 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  BIG;.  goto vdbe
355e0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
355f0 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
35600 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61  if a malloc() fa
35610 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d  ils..  */.no_mem
35620 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  :.  db->mallocFa
35630 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69  iled = 1;.  sqli
35640 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
35650 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29  "out of memory")
35660 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
35670 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64  NOMEM;.  goto vd
35680 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a  be_error_halt;..
35690 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
356a0 65 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  e for any other 
356b0 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72  kind of fatal er
356c0 72 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20 76  ror.  The "rc" v
356d0 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f  ariable.  ** sho
356e0 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72  uld hold the err
356f0 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a  or number..  */.
35700 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
35710 6f 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  or:.  assert( p-
35720 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20  >zErrMsg==0 );. 
35730 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
35740 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c  ailed ) rc = SQL
35750 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28  ITE_NOMEM;.  if(
35760 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52   rc!=SQLITE_IOER
35770 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73  R_NOMEM ){.    s
35780 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
35790 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  p, "%s", sqlite3
357a0 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 7d  ErrStr(rc));.  }
357b0 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
357c0 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
357d0 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 74  ump to here if t
357e0 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  he sqlite3_inter
357f0 72 75 70 74 28 29 20 41 50 49 20 73 65 74 73 20  rupt() API sets 
35800 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20 20  the interrupt.  
35810 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62  ** flag..  */.ab
35820 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
35830 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28 20  rupt:.  assert( 
35840 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
35850 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 53  pted );.  rc = S
35860 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
35870 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  .  p->rc = rc;. 
35880 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
35890 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74  r(p, "%s", sqlit
358a0 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
358b0 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
358c0 5f 68 61 6c 74 3b 0a 7d 0a                       _halt;.}.