/ Hex Artifact Content
Login

Artifact 6521a150c69a5c30b0ec979ec4b6d6609b7cf919:


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 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 32  is an integer, 2
10d0: 20 6f 72 20 33 2c 20 74 68 61 74 20 69 6e 64 69   or 3, that indi
10e0: 63 65 73 20 68 6f 77 20 6d 61 6e 79 20 64 69 66  ces how many dif
10f0: 66 65 72 65 6e 74 20 77 61 79 73 20 74 68 65 0a  ferent ways the.
1100: 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e 20 67 6f  ** branch can go
1110: 2e 20 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79  .  It is usually
1120: 20 32 2e 20 20 22 49 22 20 69 73 20 74 68 65 20   2.  "I" is the 
1130: 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62 72  direction the br
1140: 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e 20 20 30  anch.** goes.  0
1150: 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20 74 68 72   means falls thr
1160: 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e 73 20 62  ough.  1 means b
1170: 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 20  ranch is taken. 
1180: 20 32 20 6d 65 61 6e 73 20 74 68 65 0a 2a 2a 20   2 means the.** 
1190: 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e 61 74 69  second alternati
11a0: 76 65 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  ve branch is tak
11b0: 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72 63 4c 69  en..**.** iSrcLi
11c0: 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  ne is the source
11d0: 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72 6f 6d   code line (from
11e0: 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20 6d 61   the __LINE__ ma
11f0: 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67 65 6e  cro) that.** gen
1200: 65 72 61 74 65 64 20 74 68 65 20 56 44 42 45 20  erated the VDBE 
1210: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
1220: 69 73 20 69 6e 73 74 72 75 6d 65 6e 74 61 74 69  is instrumentati
1230: 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  on assumes that 
1240: 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65 20 63 6f  all.** source co
1250: 64 65 20 69 73 20 69 6e 20 61 20 73 69 6e 67 6c  de is in a singl
1260: 65 20 66 69 6c 65 20 28 74 68 65 20 61 6d 61 6c  e file (the amal
1270: 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53 70 65 63  gamation).  Spec
1280: 69 61 6c 20 76 61 6c 75 65 73 20 31 0a 2a 2a 20  ial values 1.** 
1290: 61 6e 64 20 32 20 66 6f 72 20 74 68 65 20 69 53  and 2 for the iS
12a0: 72 63 4c 69 6e 65 20 70 61 72 61 6d 65 74 65 72  rcLine parameter
12b0: 20 6d 65 61 6e 20 74 68 61 74 20 74 68 69 73 20   mean that this 
12c0: 70 61 72 74 69 63 75 6c 61 72 20 62 72 61 6e 63  particular branc
12d0: 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  h is.** always t
12e0: 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72 20 74 61  aken or never ta
12f0: 6b 65 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ken, respectivel
1300: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
1310: 65 64 28 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ed(SQLITE_VDBE_C
1320: 4f 56 45 52 41 47 45 29 0a 23 20 64 65 66 69 6e  OVERAGE).# defin
1330: 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65  e VdbeBranchTake
1340: 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64  n(I,M).#else.# d
1350: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
1360: 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64 62 65 54  Taken(I,M) vdbeT
1370: 61 6b 65 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69  akeBranch(pOp->i
1380: 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73  SrcLine,I,M).  s
1390: 74 61 74 69 63 20 76 6f 69 64 20 76 64 62 65 54  tatic void vdbeT
13a0: 61 6b 65 42 72 61 6e 63 68 28 69 6e 74 20 69 53  akeBranch(int iS
13b0: 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c 20 75 38  rcLine, u8 I, u8
13c0: 20 4d 29 7b 0a 20 20 20 20 69 66 28 20 69 53 72   M){.    if( iSr
13d0: 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41 4c 57 41  cLine<=2 && ALWA
13e0: 59 53 28 69 53 72 63 4c 69 6e 65 3e 30 29 20 29  YS(iSrcLine>0) )
13f0: 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69 53 72 63  {.      M = iSrc
1400: 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f 2a 20 41  Line;.      /* A
1410: 73 73 65 72 74 20 74 68 65 20 74 72 75 74 68 20  ssert the truth 
1420: 6f 66 20 56 64 62 65 43 6f 76 65 72 61 67 65 41  of VdbeCoverageA
1430: 6c 77 61 79 73 54 61 6b 65 6e 28 29 20 61 6e 64  lwaysTaken() and
1440: 20 0a 20 20 20 20 20 20 2a 2a 20 56 64 62 65 43   .      ** VdbeC
1450: 6f 76 65 72 61 67 65 4e 65 76 65 72 54 61 6b 65  overageNeverTake
1460: 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  n() */.      ass
1470: 65 72 74 28 20 28 4d 20 26 20 49 29 3d 3d 49 20  ert( (M & I)==I 
1480: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1490: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
14a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14b0: 65 42 72 61 6e 63 68 3d 3d 30 20 29 20 72 65 74  eBranch==0 ) ret
14c0: 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a  urn;  /*NO_TEST*
14d0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
14e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14f0: 65 42 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47  eBranch(sqlite3G
1500: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62  lobalConfig.pVdb
1510: 65 42 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20  eBranchArg,.    
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 3b    iSrcLine,I,M);
1550: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
1560: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
1570: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
1580: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1590: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
15a0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
15b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
15c0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
15d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
15e0: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
15f0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1600: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1610: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1620: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1630: 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29 20  ngify(P,enc,0)) 
1640: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1650: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1660: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1670: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1680: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1690: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
16a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
16b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
16c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
16d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
16e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
16f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1700: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1710: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1720: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1730: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1740: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1750: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1760: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1770: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1780: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1790: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
17a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
17b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
17c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
17d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
17e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
17f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1800: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1810: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1820: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1830: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
1840: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
1850: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
1860: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1870: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1880: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1890: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
18a0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
18b0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
18c0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
18d0: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
18e0: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
18f0: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
1900: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
1910: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
1920: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
1930: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
1940: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
1950: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
1960: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
1970: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
1980: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
1990: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
19a0: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
19b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
19c0: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
19d0: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
19e0: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a00: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
1a10: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
1a20: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
1a30: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1a40: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
1a50: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
1a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a70: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1a80: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a90: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
1aa0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1ab0: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
1ac0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1ad0: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
1ae0: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
1af0: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
1b00: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1b10: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b20: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b30: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b40: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b50: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b60: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b70: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b80: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b90: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1ba0: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1bb0: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1bc0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bd0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1be0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bf0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1c00: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1c10: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c30: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c40: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c50: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c60: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c70: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c80: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c90: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1ca0: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1cb0: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1cc0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cd0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1ce0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cf0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1d00: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1d10: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d20: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d30: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d40: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d50: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d60: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d70: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d80: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d90: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1da0: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1db0: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1dc0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1dd0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1de0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
1df0: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
1e00: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
1e10: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
1e20: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
1e30: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
1e40: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
1e50: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
1e60: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
1e70: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
1e80: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
1e90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
1ea0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1eb0: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
1ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
1ed0: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
1ee0: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1ef0: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1f00: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1f10: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1f20: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1f30: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1f40: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
1f50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1f60: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
1f70: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
1fa0: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
1fb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1fc0: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
1fd0: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
1fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1ff0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
2000: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2010: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2020: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2030: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2040: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
2050: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
2060: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2070: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2080: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2090: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
20a0: 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74 6f  (pCx, 0, offseto
20b0: 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41 6c  f(VdbeCursor,pAl
20c0: 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70  tCursor));.    p
20d0: 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20 65  Cx->eCurType = e
20e0: 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43 78  CurType;.    pCx
20f0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
2100: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
2110: 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e  Field;.    pCx->
2120: 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e  aOffset = &pCx->
2130: 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20  aType[nField];. 
2140: 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65 3d     if( eCurType=
2150: 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2160: 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63 2e  {.      pCx->uc.
2170: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2180: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2190: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
21b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
21c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
21d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
21e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63 2e  sorZero(pCx->uc.
21f0: 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
2200: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78    }.  return pCx
2210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
2220: 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75  o convert a valu
2230: 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  e into a numeric
2240: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2250: 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20  if we can.** do 
2260: 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  so without loss 
2270: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  of information. 
2280: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2290: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a   if the string.*
22a0: 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e  * looks like a n
22b0: 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  umber, convert i
22c0: 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e  t into a number.
22d0: 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
22e0: 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20  .** look like a 
22f0: 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74  number, leave it
2300: 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   alone..**.** If
2310: 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20   the bTryForInt 
2320: 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68  flag is true, th
2330: 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74 20  en extra effort 
2340: 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a  is made to give.
2350: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ** an integer re
2360: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53  presentation.  S
2370: 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b  trings that look
2380: 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70   like floating p
2390: 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62  oint.** values b
23a0: 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f  ut which have no
23b0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70   fractional comp
23c0: 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20  onent (example: 
23d0: 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c  '48.00').** will
23e0: 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20   have a MEM_Int 
23f0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77  representation w
2400: 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69  hen bTryForInt i
2410: 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  s true..**.** If
2420: 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66   bTryForInt is f
2430: 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68  alse, then if th
2440: 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
2450: 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61  ontains a decima
2460: 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78  l.** point or ex
2470: 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69  ponential notati
2480: 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  on, the result i
2490: 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c  s only MEM_Real,
24a0: 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72   even.** if ther
24b0: 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e  e is an exact in
24c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
24d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e  tion of the quan
24e0: 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tity..*/.static 
24f0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
2500: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
2510: 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72  Rec, int bTryFor
2520: 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72  Int){.  double r
2530: 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61  Value;.  i64 iVa
2540: 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20  lue;.  u8 enc = 
2550: 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73  pRec->enc;.  ass
2560: 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67  ert( (pRec->flag
2570: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2580: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
2590: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
25a0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
25b0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
25c0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
25d0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
25e0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
25f0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2600: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2610: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2620: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2630: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2640: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2650: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
2660: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
2670: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
2680: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
2690: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
26a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
26b0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
26c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
26d0: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
26e0: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
26f0: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2700: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2710: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2720: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2730: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2740: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2750: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2760: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2770: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2780: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2790: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
27a0: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
27b0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
27c0: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
27d0: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
27e0: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
27f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2800: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
2810: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
2820: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
2830: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
2840: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
2850: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2860: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2870: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2880: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2890: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
28a0: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
28b0: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
28c0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
28d0: 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a 20 20 20  _AFF_BLOB:.**   
28e0: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
28f0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2900: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2910: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
2920: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
2930: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
2940: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
2950: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
2960: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2970: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2980: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2990: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
29a0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
29b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
29c0: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
29d0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
29e0: 45 52 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65  ERIC ){.    asse
29f0: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
2a00: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2a10: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
2a20: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
2a30: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
2a40: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a50: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
2a60: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2a70: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
2a80: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
2a90: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
2aa0: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2ab0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
2ac0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
2ad0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
2ae0: 20 4d 45 4d 5f 53 74 72 20 29 20 61 70 70 6c 79   MEM_Str ) apply
2af0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2b00: 70 52 65 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d  pRec,1);.      }
2b10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
2b20: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
2b30: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2b40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2b50: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
2b60: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
2b70: 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  EXT ){.    /* On
2b80: 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63  ly attempt the c
2b90: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58  onversion to TEX
2ba0: 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  T if there is an
2bb0: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
2bc0: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2bd0: 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64  tation (blob and
2be0: 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74   NULL do not get
2bf0: 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20   converted) but 
2c00: 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a  no string.    **
2c10: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2c20: 20 20 49 74 20 77 6f 75 6c 64 20 62 65 20 68 61    It would be ha
2c30: 72 6d 6c 65 73 73 20 74 6f 20 72 65 70 65 61 74  rmless to repeat
2c40: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2c50: 69 66 20 0a 20 20 20 20 2a 2a 20 74 68 65 72 65  if .    ** there
2c60: 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 73 74   is already a st
2c70: 72 69 6e 67 20 72 65 70 2c 20 62 75 74 20 69 74  ring rep, but it
2c80: 20 69 73 20 70 6f 69 6e 74 6c 65 73 73 20 74 6f   is pointless to
2c90: 20 77 61 73 74 65 20 74 68 6f 73 65 0a 20 20 20   waste those.   
2ca0: 20 2a 2a 20 43 50 55 20 63 79 63 6c 65 73 2e 20   ** CPU cycles. 
2cb0: 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70  */.    if( 0==(p
2cc0: 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53  Rec->flags&MEM_S
2cd0: 74 72 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a  tr) ){ /*OPTIMIZ
2ce0: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
2cf0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65 63  .      if( (pRec
2d00: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
2d10: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20  l|MEM_Int)) ){. 
2d20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2d30: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
2d40: 52 65 63 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20  Rec, enc, 1);.  
2d50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2d60: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2d70: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2d80: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2d90: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2da0: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2db0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2dc0: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2dd0: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2de0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2df0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2e00: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2e10: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2e20: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2e30: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2e40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2e50: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2e60: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2e70: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2e80: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2e90: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2ea0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2eb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2ec0: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2ed0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ee0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2ef0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2f00: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2f10: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2f20: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2f30: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2f40: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2f50: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2f60: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2f70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2f80: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2f90: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2fa0: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2fb0: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2fc0: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2fd0: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2fe0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2ff0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
3000: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
3010: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
3020: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
3030: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
3040: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
3050: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
3060: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
3070: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
3080: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
3090: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
30a0: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
30b0: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
30c0: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
30d0: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
30e0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
30f0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
3100: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
3110: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
3120: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
3130: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
3140: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
3150: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3160: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
3170: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
3180: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
3190: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
31a0: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
31b0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
31c0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31d0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31e0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
31f0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3200: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3210: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
3220: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
3230: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3240: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3250: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3260: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3270: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3280: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3290: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
32a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
32b0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
32c0: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
32d0: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
32e0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
32f0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
3300: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
3310: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
3320: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
3330: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3340: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3350: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3360: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3370: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3380: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3390: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
33a0: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
33b0: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
33c0: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
33d0: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
33e0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
33f0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
3400: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3410: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
3420: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
3430: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3440: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3450: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3460: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3470: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3480: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
3490: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
34a0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
34b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
34c0: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
34d0: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
34e0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
34f0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
3500: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
3510: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
3520: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
3530: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3540: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3550: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3560: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3570: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3580: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
3590: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
35a0: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
35b0: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
35c0: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
35d0: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
35e0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
35f0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
3600: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
3610: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
3620: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
3630: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3640: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3650: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3660: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3670: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3680: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
3690: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
36a0: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
36b0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
36c0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
36d0: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
36e0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
36f0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3700: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
3710: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3720: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
3730: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3740: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3750: 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63  0, zCsr, "%c", c
3760: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3770: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3780: 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Csr);.    sqlite
3790: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
37a0: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
37b0: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
37c0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
37d0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
37e0: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
37f0: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
3800: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
3810: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3820: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
3830: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
3840: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
3850: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3860: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3870: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
3880: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
3890: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
38a0: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
38b0: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
38c0: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
38d0: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
38e0: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
38f0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3900: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3910: 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20  0, zCsr, "]%s", 
3920: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3930: 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  nc]);.    zCsr +
3940: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3950: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28  0(zCsr);.    if(
3960: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
3970: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3980: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3990: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
39a0: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
39b0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
39c0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
39d0: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
39e0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
39f0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
3a00: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
3a10: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
3a20: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
3a30: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3a40: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
3a50: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3a60: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3a70: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3a80: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3a90: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
3aa0: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3ab0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3ac0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3ad0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
3ae0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3af0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
3b00: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3b10: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3b20: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3b30: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3b40: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3b50: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3b60: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
3b70: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
3b80: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3b90: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
3ba0: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3bb0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3bc0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3bd0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
3be0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
3bf0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
3c00: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
3c10: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
3c20: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
3c30: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3c40: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3c50: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
3c60: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
3c70: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
3c80: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3c90: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
3ca0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3cb0: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3cc0: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3cd0: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3ce0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3cf0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3d00: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3d10: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3d20: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3d30: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
3d40: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
3d50: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
3d60: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
3d70: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
3d80: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
3d90: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
3da0: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
3db0: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
3dc0: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
3dd0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3de0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3df0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e  {.    printf(" N
3e00: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3e10: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3e20: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3e30: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3e40: 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e  Str) ){.    prin
3e50: 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70  tf(" si:%lld", p
3e60: 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20  ->u.i);.  }else 
3e70: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3e80: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72  EM_Int ){.    pr
3e90: 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20  intf(" i:%lld", 
3ea0: 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66  p->u.i);.#ifndef
3eb0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
3ec0: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65  ATING_POINT.  }e
3ed0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ee0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3ef0: 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67     printf(" r:%g
3f00: 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64  ", p->u.r);.#end
3f10: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3f20: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3f30: 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69 6e  wSet ){.    prin
3f40: 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29 3b  tf(" (rowset)");
3f50: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
3f60: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
3f70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
3f80: 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a  PrettyPrint(p, z
3f90: 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  Buf);.    printf
3fa0: 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20  (" %s", zBuf);. 
3fb0: 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67   }.  if( p->flag
3fc0: 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65 20  s & MEM_Subtype 
3fd0: 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74 79  ) printf(" subty
3fe0: 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e 65  pe=0x%02x", p->e
3ff0: 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61 74  Subtype);.}.stat
4000: 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72  ic void register
4010: 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c 20  Trace(int iReg, 
4020: 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74  Mem *p){.  print
4030: 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20  f("REG[%d] = ", 
4040: 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63  iReg);.  memTrac
4050: 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72 69  ePrint(p);.  pri
4060: 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e  ntf("\n");.}.#en
4070: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
4080: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
4090: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
40a0: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
40b0: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
40c0: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
40d0: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
40e0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
40f0: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
4100: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
4110: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
4120: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
4130: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
4140: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
4150: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
4160: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
4170: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
4180: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
4190: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
41a0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
41b0: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
41c0: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
41d0: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
41e0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
41f0: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
4200: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
4210: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
4220: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
4230: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
4240: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
4250: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
4260: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
4270: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
4280: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
4290: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
42a0: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
42b0: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
42c0: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
42d0: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
42e0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
42f0: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
4300: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
4310: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
4320: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
4330: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
4340: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
4350: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
4360: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
4370: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
4380: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
4390: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
43a0: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
43b0: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
43c0: 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  the register of 
43d0: 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69  pOp->p2 after fi
43e0: 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74  rst preparing it
43f0: 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72   to be.** overwr
4400: 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e  itten with an in
4410: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
4420: 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f  static SQLITE_NO
4430: 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32  INLINE Mem *out2
4440: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4450: 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a  ear(Mem *pOut){.
4460: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
4470: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
4480: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4490: 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e  EM_Int;.  return
44a0: 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20   pOut;.}.static 
44b0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
44c0: 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62  ase(Vdbe *p, Vdb
44d0: 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d  eOp *pOp){.  Mem
44e0: 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74   *pOut;.  assert
44f0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
4500: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
4510: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
4520: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
4530: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
4540: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
4550: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
4560: 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64 62  pOut);.  if( Vdb
4570: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
4580: 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54  ) ){ /*OPTIMIZAT
4590: 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20  ION-IF-FALSE*/. 
45a0: 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72     return out2Pr
45b0: 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61  ereleaseWithClea
45c0: 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  r(pOut);.  }else
45d0: 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
45e0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
45f0: 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20   return pOut;.  
4600: 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  }.}.../*.** Exec
4610: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
4620: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
4630: 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73   we can..** This
4640: 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20   is the core of 
4650: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
4660: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
4670: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
4680: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
4690: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
46a0: 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61  BE */.){.  Op *a
46b0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20  Op = p->aOp;    
46c0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
46d0: 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20   p->aOp */.  Op 
46e0: 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20  *pOp = aOp;     
46f0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
4700: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
4710: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
4720: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
4730: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
4740: 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70  E).  Op *pOrigOp
4750: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4760: 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20  /* Value of pOp 
4770: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
4780: 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66  e loop */.#endif
4790: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
47a0: 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74 72  EBUG.  int nExtr
47b0: 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20 20  aDelete = 0;    
47c0: 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46 4f    /* Verifies FO
47d0: 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58 44  RDELETE and AUXD
47e0: 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23  ELETE flags */.#
47f0: 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20 3d  endif.  int rc =
4800: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4810: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4820: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4830: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4840: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4850: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
4860: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
4870: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
4880: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
4890: 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65  rror if positive
48a0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e   */.  u8 encodin
48b0: 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20  g = ENC(db);    
48c0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
48d0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
48e0: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
48f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4900: 75 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70  ult of last comp
4910: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  arison */.  unsi
4920: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
4930: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
4940: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
4950: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
4960: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4970: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4980: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
4990: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30  rogressLimit = 0
49a0: 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67  ;/* Invoke xProg
49b0: 72 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53  ress() when nVmS
49c0: 74 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73  tep reaches this
49d0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d   */.#endif.  Mem
49e0: 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d   *aMem = p->aMem
49f0: 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20  ;       /* Copy 
4a00: 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20  of p->aMem */.  
4a10: 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20  Mem *pIn1 = 0;  
4a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
4a30: 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  t input operand 
4a40: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d  */.  Mem *pIn2 =
4a50: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4a60: 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65  /* 2nd input ope
4a70: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4a80: 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In3 = 0;        
4a90: 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75       /* 3rd inpu
4aa0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4ab0: 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20  em *pOut = 0;   
4ac0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74            /* Out
4ad0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
4ae0: 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d   int *aPermute =
4af0: 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50   0;         /* P
4b00: 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f  ermutation of co
4b10: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
4b20: 70 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61  pare */.  i64 la
4b30: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
4b40: 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76  stRowid;  /* Sav
4b50: 65 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ed value of the 
4b60: 6c 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49  last insert ROWI
4b70: 44 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45  D */.#ifdef VDBE
4b80: 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73  _PROFILE.  u64 s
4b90: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
4ba0: 20 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f        /* CPU clo
4bb0: 63 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72  ck count at star
4bc0: 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  t of opcode */.#
4bd0: 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53  endif.  /*** INS
4be0: 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20  ERT STACK UNION 
4bf0: 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73  HERE ***/..  ass
4c00: 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56  ert( p->magic==V
4c10: 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b  DBE_MAGIC_RUN );
4c20: 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65    /* sqlite3_ste
4c30: 70 28 29 20 76 65 72 69 66 69 65 73 20 74 68 69  p() verifies thi
4c40: 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  s */.  sqlite3Vd
4c50: 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66  beEnter(p);.  if
4c60: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
4c70: 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20  NOMEM ){.    /* 
4c80: 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66 20  This happens if 
4c90: 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64  a malloc() insid
4ca0: 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  e a call to sqli
4cb0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
4cc0: 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ) or.    ** sqli
4cd0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
4ce0: 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a  6() failed.  */.
4cf0: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
4d00: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
4d10: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
4d20: 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d  || (p->rc&0xff)=
4d30: 3d 53 51 4c 49 54 45 5f 42 55 53 59 0a 20 20 20  =SQLITE_BUSY.   
4d40: 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 2d 3e           || (p->
4d50: 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45  rc&0xFF)==SQLITE
4d60: 5f 4c 4f 43 4b 45 44 20 29 3b 0a 20 20 61 73 73  _LOCKED );.  ass
4d70: 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
4d80: 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  r || p->readOnly
4d90: 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d  !=0 );.  p->rc =
4da0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d   SQLITE_OK;.  p-
4db0: 3e 69 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20  >iCurrentTime = 
4dc0: 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  0;.  assert( p->
4dd0: 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20  explain==0 );.  
4de0: 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20  p->pResultSet = 
4df0: 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e  0;.  db->busyHan
4e00: 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a  dler.nBusy = 0;.
4e10: 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49    if( db->u1.isI
4e20: 6e 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74  nterrupted ) got
4e30: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69  o abort_due_to_i
4e40: 6e 74 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69  nterrupt;.  sqli
4e50: 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
4e60: 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  l(p);.#ifndef SQ
4e70: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
4e80: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66  SS_CALLBACK.  if
4e90: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20  ( db->xProgress 
4ea0: 29 7b 0a 20 20 20 20 75 33 32 20 69 50 72 69 6f  ){.    u32 iPrio
4eb0: 72 20 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  r = p->aCounter[
4ec0: 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
4ed0: 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20  S_VM_STEP];.    
4ee0: 61 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e  assert( 0 < db->
4ef0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a  nProgressOps );.
4f00: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
4f10: 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65  it = db->nProgre
4f20: 73 73 4f 70 73 20 2d 20 28 69 50 72 69 6f 72 20  ssOps - (iPrior 
4f30: 25 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  % db->nProgressO
4f40: 70 73 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ps);.  }.#endif.
4f50: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4f60: 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67  BUG.  sqlite3Beg
4f70: 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
4f80: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30  ;.  if( p->pc==0
4f90: 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66  .   && (p->db->f
4fa0: 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56  lags & (SQLITE_V
4fb0: 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54  dbeListing|SQLIT
4fc0: 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45  E_VdbeEQP|SQLITE
4fd0: 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a  _VdbeTrace))!=0.
4fe0: 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a    ){.    int i;.
4ff0: 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31      int once = 1
5000: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
5010: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
5020: 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61    if( p->db->fla
5030: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
5040: 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20  Listing ){.     
5050: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72   printf("VDBE Pr
5060: 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e  ogram Listing:\n
5070: 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ");.      for(i=
5080: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
5090: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
50a0: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
50b0: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
50c0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
50d0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
50e0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
50f0: 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20  dbeEQP ){.      
5100: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
5110: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  p; i++){.       
5120: 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f   if( aOp[i].opco
5130: 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29  de==OP_Explain )
5140: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
5150: 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56  once ) printf("V
5160: 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c  DBE Query Plan:\
5170: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  n");.          p
5180: 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f  rintf("%s\n", aO
5190: 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20  p[i].p4.z);.    
51a0: 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a        once = 0;.
51b0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
51c0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
51d0: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
51e0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
51f0: 29 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20  )  printf("VDBE 
5200: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a  Trace:\n");.  }.
5210: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
5220: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64  gnMalloc();.#end
5230: 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f  if.  for(pOp=&aO
5240: 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70  p[p->pc]; 1; pOp
5250: 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f  ++){.    /* Erro
5260: 72 73 20 61 72 65 20 64 65 74 65 63 74 65 64 20  rs are detected 
5270: 62 79 20 69 6e 64 69 76 69 64 75 61 6c 20 6f 70  by individual op
5280: 63 6f 64 65 73 2c 20 77 69 74 68 20 61 6e 20 69  codes, with an i
5290: 6d 6d 65 64 69 61 74 65 0a 20 20 20 20 2a 2a 20  mmediate.    ** 
52a0: 6a 75 6d 70 73 20 74 6f 20 61 62 6f 72 74 5f 64  jumps to abort_d
52b0: 75 65 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a  ue_to_error. */.
52c0: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
52d0: 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20  SQLITE_OK );..  
52e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61    assert( pOp>=a
52f0: 4f 70 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70  Op && pOp<&aOp[p
5300: 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20  ->nOp]);.#ifdef 
5310: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
5320: 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33   start = sqlite3
5330: 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66  Hwtime();.#endif
5340: 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a  .    nVmStep++;.
5350: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
5360: 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
5370: 41 54 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e  ATUS.    if( p->
5380: 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78  anExec ) p->anEx
5390: 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70  ec[(int)(pOp-aOp
53a0: 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  )]++;.#endif..  
53b0: 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20    /* Only allow 
53c0: 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54  tracing if SQLIT
53d0: 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e  E_DEBUG is defin
53e0: 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65  ed..    */.#ifde
53f0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
5400: 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73     if( db->flags
5410: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
5420: 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ace ){.      sql
5430: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
5440: 73 74 64 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f  stdout, (int)(pO
5450: 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a  p - aOp), pOp);.
5460: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
5470: 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63     ..    /* Chec
5480: 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e  k to see if we n
5490: 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20  eed to simulate 
54a0: 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54  an interrupt.  T
54b0: 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  his only happens
54c0: 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61  .    ** if we ha
54d0: 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73  ve a special tes
54e0: 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a  t build..    */.
54f0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
5500: 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ST.    if( sqlit
5510: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
5520: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  nt>0 ){.      sq
5530: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
5540: 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69  count--;.      i
5550: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
5560: 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b  rupt_count==0 ){
5570: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5580: 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a  _interrupt(db);.
5590: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
55a0: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e  ndif..    /* San
55b0: 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20  ity checking on 
55c0: 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  other operands *
55d0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
55e0: 44 45 42 55 47 0a 20 20 20 20 7b 0a 20 20 20 20  DEBUG.    {.    
55f0: 20 20 75 38 20 6f 70 50 72 6f 70 65 72 74 79 20    u8 opProperty 
5600: 3d 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  = sqlite3OpcodeP
5610: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
5620: 6f 64 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  ode];.      if( 
5630: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
5640: 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20  FLG_IN1)!=0 ){. 
5650: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5660: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20  Op->p1>0 );.    
5670: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5680: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
5690: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
56a0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
56b0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
56c0: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20  m[pOp->p1]) );. 
56d0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
56e0: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
56f0: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
5700: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a  em[pOp->p1]) );.
5710: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
5720: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
5730: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b  &aMem[pOp->p1]);
5740: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
5750: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
5760: 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29   OPFLG_IN2)!=0 )
5770: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
5780: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
5790: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
57a0: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
57b0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
57c0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
57d0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
57e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29  aMem[pOp->p2]) )
57f0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
5800: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
5810: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
5820: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20  &aMem[pOp->p2]) 
5830: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
5840: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5850: 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
5860: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
5870: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
5880: 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d  y & OPFLG_IN3)!=
5890: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
58a0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
58b0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
58c0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
58d0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
58e0: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  or) );.        a
58f0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5900: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
5910: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
5920: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
5930: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
5940: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  ts(&aMem[pOp->p3
5950: 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45  ]) );.        RE
5960: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5970: 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p3, &aMem[pOp-
5980: 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p3]);.      }. 
5990: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
59a0: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54  erty & OPFLG_OUT
59b0: 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  2)!=0 ){.       
59c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
59d0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
59e0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
59f0: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
5a00: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
5a10: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
5a20: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
5a30: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p2]);.      }.
5a40: 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f        if( (opPro
5a50: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55  perty & OPFLG_OU
5a60: 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T3)!=0 ){.      
5a70: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5a80: 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  3>0 );.        a
5a90: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
5aa0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
5ab0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5ac0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
5ad0: 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
5ae0: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p3]);.      }
5af0: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  .    }.#endif.#i
5b00: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
5b10: 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
5b20: 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29  ed(VDBE_PROFILE)
5b30: 0a 20 20 20 20 70 4f 72 69 67 4f 70 20 3d 20 70  .    pOrigOp = p
5b40: 4f 70 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20  Op;.#endif.  .  
5b50: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
5b60: 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a  pcode ){../*****
5b70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ba0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bb0: 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74  ********.** What
5bc0: 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61   follows is a ma
5bd0: 73 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61  ssive switch sta
5be0: 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63  tement where eac
5bf0: 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74  h case implement
5c00: 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20  s a.** separate 
5c10: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74  instruction in t
5c20: 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  he virtual machi
5c30: 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f  ne.  If we follo
5c40: 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69  w the usual.** i
5c50: 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65  ndentation conve
5c60: 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73  ntions, each cas
5c70: 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65  e should be inde
5c80: 6e 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73  nted by 6 spaces
5c90: 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69  .  But.** that i
5ca0: 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65  s a lot of waste
5cb0: 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c  d space on the l
5cc0: 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20  eft margin.  So 
5cd0: 74 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a  the code within.
5ce0: 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74  ** the switch st
5cf0: 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65  atement will bre
5d00: 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69  ak with conventi
5d10: 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d  on and be flush-
5d20: 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a  left. Another.**
5d30: 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69   big comment (si
5d40: 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e  milar to this on
5d50: 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65  e) will mark the
5d60: 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f   point in the co
5d70: 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74  de where.** we t
5d80: 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74  ransition back t
5d90: 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61  o normal indenta
5da0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
5db0: 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61  formatting of ea
5dc0: 63 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72  ch case is impor
5dd0: 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66  tant.  The makef
5de0: 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a  ile for SQLite.*
5df0: 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20  * generates two 
5e00: 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73  C files "opcodes
5e10: 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73  .h" and "opcodes
5e20: 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  .c" by scanning 
5e30: 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f  this.** file loo
5e40: 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74  king for lines t
5e50: 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22  hat begin with "
5e60: 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20  case OP_".  The 
5e70: 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a  opcodes.h files.
5e80: 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65  ** will be fille
5e90: 64 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20  d with #defines 
5ea0: 74 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65  that give unique
5eb0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20   integer values 
5ec0: 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64  to each.** opcod
5ed0: 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65  e and the opcode
5ee0: 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c  s.c file is fill
5ef0: 65 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79  ed with an array
5f00: 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72   of strings wher
5f10: 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67  e.** each string
5f20: 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63   is the symbolic
5f30: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f   name for the co
5f40: 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f  rresponding opco
5f50: 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63  de.  If the.** c
5f60: 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ase statement is
5f70: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63   followed by a c
5f80: 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f  omment of the fo
5f90: 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e  rm "/# same as .
5fa0: 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63  .. #/".** that c
5fb0: 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74  omment is used t
5fc0: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
5fd0: 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65  particular value
5fe0: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a   of the opcode..
5ff0: 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77  **.** Other keyw
6000: 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d  ords in the comm
6010: 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73  ent that follows
6020: 20 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75   each case are u
6030: 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72  sed to.** constr
6040: 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e  uct the OPFLG_IN
6050: 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20  ITIALIZER value 
6060: 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73  that initializes
6070: 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b   opcodeProperty[
6080: 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69  ]..** Keywords i
6090: 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32  nclude: in1, in2
60a0: 2c 20 69 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74  , in3, out2, out
60b0: 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d  3.  See.** the m
60c0: 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72  kopcodeh.awk scr
60d0: 69 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ipt for addition
60e0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
60f0: 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74  **.** Documentat
6100: 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f  ion about VDBE o
6110: 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61  pcodes is genera
6120: 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  ted by scanning 
6130: 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72  this file.** for
6140: 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63   lines of that c
6150: 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22  ontain "Opcode:"
6160: 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64  .  That line and
6170: 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a   all subsequent.
6180: 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73  ** comment lines
6190: 20 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65   are used in the
61a0: 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74   generation of t
61b0: 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64  he opcode.html d
61c0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20  ocumentation.** 
61d0: 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d  file..**.** SUMM
61e0: 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46  ARY:.**.**     F
61f0: 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70  ormatting is imp
6200: 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74  ortant to script
6210: 73 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73  s that scan this
6220: 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f   file..**     Do
6230: 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f   not deviate fro
6240: 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  m the formatting
6250: 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79   style currently
6260: 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a   in use..**.****
6270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f  *********/../* O
62c0: 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50  pcode:  Goto * P
62d0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e  2 * * *.**.** An
62e0: 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a   unconditional j
62f0: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
6300: 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69  2..** The next i
6310: 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75  nstruction execu
6320: 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20  ted will be .** 
6330: 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78  the one at index
6340: 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67   P2 from the beg
6350: 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65  inning of.** the
6360: 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20   program..**.** 
6370: 54 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  The P1 parameter
6380: 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79   is not actually
6390: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
63a0: 63 6f 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20  code.  However, 
63b0: 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d  it.** is sometim
63c0: 65 73 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74  es set to 1 inst
63d0: 65 61 64 20 6f 66 20 30 20 61 73 20 61 20 68 69  ead of 0 as a hi
63e0: 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e  nt to the comman
63f0: 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20  d-line shell.** 
6400: 74 68 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69  that this Goto i
6410: 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20  s the bottom of 
6420: 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20  a loop and that 
6430: 74 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50  the lines from P
6440: 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65  2 down.** to the
6450: 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68   current line sh
6460: 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64  ould be indented
6470: 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
6480: 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  put..*/.case OP_
6490: 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Goto: {         
64a0: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a      /* jump */.j
64b0: 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68  ump_to_p2_and_ch
64c0: 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
64d0: 74 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  t:.  pOp = &aOp[
64e0: 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20  pOp->p2 - 1];.. 
64f0: 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74   /* Opcodes that
6500: 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
6510: 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f   bottom of a loo
6520: 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50  p (OP_Next, OP_P
6530: 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65  rev,.  ** OP_VNe
6540: 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65 78  xt, OP_RowSetNex
6550: 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e  t, or OP_SorterN
6560: 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65  ext) all jump he
6570: 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d  re upon.  ** com
6580: 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20  pletion.  Check 
6590: 74 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74 65  to see if sqlite
65a0: 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68 61  3_interrupt() ha
65b0: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20  s been called.  
65c0: 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f  ** or if the pro
65d0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e  gress callback n
65e0: 65 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b  eeds to be invok
65f0: 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ed. .  **.  ** T
6600: 68 69 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e  his code uses un
6610: 73 74 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f  structured "goto
6620: 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64  " statements and
6630: 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63   does not look c
6640: 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74  lean..  ** But t
6650: 68 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74  hat is not due t
6660: 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20  o sloppy coding 
6670: 68 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65  habits. The code
6680: 20 69 73 20 77 72 69 74 74 65 6e 20 74 68 69 73   is written this
6690: 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65  .  ** way for pe
66a0: 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76  rformance, to av
66b0: 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75  oid having to ru
66c0: 6e 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20  n the interrupt 
66d0: 61 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a  and progress.  *
66e0: 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72  * checks on ever
66f0: 79 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20  y opcode.  This 
6700: 68 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74  helps sqlite3_st
6710: 65 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75  ep() to run abou
6720: 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74  t 1.5%.  ** fast
6730: 65 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  er according to 
6740: 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c  "valgrind --tool
6750: 3d 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a  =cachegrind" */.
6760: 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
6770: 75 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75  upt:.  if( db->u
6780: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
6790: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
67a0: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23  _to_interrupt;.#
67b0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
67c0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
67d0: 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74  BACK.  /* Call t
67e0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
67f0: 62 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f  back if it is co
6800: 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65  nfigured and the
6810: 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72   required number
6820: 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70  .  ** of VDBE op
6830: 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63  s have been exec
6840: 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e  uted (either sin
6850: 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69  ce this invocati
6860: 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74  on of.  ** sqlit
6870: 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20  e3VdbeExec() or 
6880: 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20  since last time 
6890: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
68a0: 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64  lback was called
68b0: 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70  )..  ** If the p
68c0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
68d0: 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   returns non-zer
68e0: 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74  o, exit the virt
68f0: 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68  ual machine with
6900: 0a 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63  .  ** a return c
6910: 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  ode SQLITE_ABORT
6920: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
6930: 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 20 26 26  >xProgress!=0 &&
6940: 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72   nVmStep>=nProgr
6950: 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20 20  essLimit ){.    
6960: 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f  assert( db->nPro
6970: 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20  gressOps!=0 );. 
6980: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
6990: 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62  t = nVmStep + db
69a0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
69b0: 20 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50   (nVmStep%db->nP
69c0: 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20  rogressOps);.   
69d0: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
69e0: 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73  ss(db->pProgress
69f0: 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63  Arg) ){.      rc
6a00: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
6a10: 55 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  UPT;.      goto 
6a20: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
6a30: 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  or;.    }.  }.#e
6a40: 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b  ndif.  .  break;
6a50: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6a60: 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20  Gosub P1 P2 * * 
6a70: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
6a80: 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73  e current addres
6a90: 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20  s onto register 
6aa0: 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a  P1.** and then j
6ab0: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
6ac0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  2..*/.case OP_Go
6ad0: 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  sub: {          
6ae0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
6af0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
6b00: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
6b10: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
6b20: 72 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20  rsor) );.  pIn1 
6b30: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6b40: 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65  ;.  assert( Vdbe
6b50: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29  MemDynamic(pIn1)
6b60: 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75  ==0 );.  memAbou
6b70: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
6b80: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67  1);.  pIn1->flag
6b90: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70  s = MEM_Int;.  p
6ba0: 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29  In1->u.i = (int)
6bb0: 28 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47  (pOp-aOp);.  REG
6bc0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
6bd0: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f  >p1, pIn1);..  /
6be0: 2a 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72  * Most jump oper
6bf0: 61 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f  ations do a goto
6c00: 20 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e   to this spot in
6c10: 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65   order to update
6c20: 0a 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f  .  ** the pOp po
6c30: 69 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74  inter. */.jump_t
6c40: 6f 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61  o_p2:.  pOp = &a
6c50: 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b  Op[pOp->p2 - 1];
6c60: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6c70: 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20  Opcode:  Return 
6c80: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
6c90: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78   Jump to the nex
6ca0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66  t instruction af
6cb0: 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20  ter the address 
6cc0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  in register P1. 
6cd0: 20 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75   After.** the ju
6ce0: 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20  mp, register P1 
6cf0: 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65  becomes undefine
6d00: 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  d..*/.case OP_Re
6d10: 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20  turn: {         
6d20: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
6d30: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6d40: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
6d50: 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  In1->flags==MEM_
6d60: 49 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26  Int );.  pOp = &
6d70: 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a  aOp[pIn1->u.i];.
6d80: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6d90: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
6da0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6db0: 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74  code: InitCorout
6dc0: 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ine P1 P2 P3 * *
6dd0: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65  .**.** Set up re
6de0: 67 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61  gister P1 so tha
6df0: 74 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20  t it will Yield 
6e00: 74 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  to the coroutine
6e10: 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61  .** located at a
6e20: 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a  ddress P3..**.**
6e30: 20 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74   If P2!=0 then t
6e40: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70  he coroutine imp
6e50: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65  lementation imme
6e60: 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a  diately follows.
6e70: 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  ** this opcode. 
6e80: 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68   So jump over th
6e90: 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c  e coroutine impl
6ea0: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a  ementation to.**
6eb0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a   address P2..**.
6ec0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64  ** See also: End
6ed0: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
6ee0: 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69  e OP_InitCorouti
6ef0: 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d  ne: {     /* jum
6f00: 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
6f10: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70  Op->p1>0 &&  pOp
6f20: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
6f30: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
6f40: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
6f50: 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p2>=0 && pOp->p
6f60: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73  2<p->nOp );.  as
6f70: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
6f80: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e   && pOp->p3<p->n
6f90: 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  Op );.  pOut = &
6fa0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6fb0: 20 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65   assert( !VdbeMe
6fc0: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29  mDynamic(pOut) )
6fd0: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
6fe0: 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70  pOp->p3 - 1;.  p
6ff0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
7000: 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d  _Int;.  if( pOp-
7010: 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  >p2 ) goto jump_
7020: 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
7030: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45  }../* Opcode:  E
7040: 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a  ndCoroutine P1 *
7050: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
7060: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
7070: 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72  the address in r
7080: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 61 20  egister P1 is a 
7090: 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74  Yield..** Jump t
70a0: 6f 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74  o the P2 paramet
70b0: 65 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64  er of that Yield
70c0: 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a  ..** After the j
70d0: 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31  ump, register P1
70e0: 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e   becomes undefin
70f0: 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
7100: 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e  so: InitCoroutin
7110: 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64  e.*/.case OP_End
7120: 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20  Coroutine: {    
7130: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
7140: 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c  .  VdbeOp *pCall
7150: 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  er;.  pIn1 = &aM
7160: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
7170: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
7180: 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
7190: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75   assert( pIn1->u
71a0: 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75  .i>=0 && pIn1->u
71b0: 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  .i<p->nOp );.  p
71c0: 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49  Caller = &aOp[pI
71d0: 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65  n1->u.i];.  asse
71e0: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63  rt( pCaller->opc
71f0: 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b  ode==OP_Yield );
7200: 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c  .  assert( pCall
7210: 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61  er->p2>=0 && pCa
7220: 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20  ller->p2<p->nOp 
7230: 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  );.  pOp = &aOp[
7240: 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d  pCaller->p2 - 1]
7250: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
7260: 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
7270: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7280: 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50  Opcode:  Yield P
7290: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
72a0: 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61   Swap the progra
72b0: 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74  m counter with t
72c0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
72d0: 73 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a  ster P1.  This.*
72e0: 2a 20 68 61 73 20 74 68 65 20 65 66 66 65 63 74  * has the effect
72f0: 20 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20   of yielding to 
7300: 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a  a coroutine..**.
7310: 2a 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74  ** If the corout
7320: 69 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e  ine that is laun
7330: 63 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  ched by this ins
7340: 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69  truction ends wi
7350: 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52  th.** Yield or R
7360: 65 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69  eturn then conti
7370: 6e 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20  nue to the next 
7380: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
7390: 74 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f  t if.** the coro
73a0: 75 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62  utine launched b
73b0: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
73c0: 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20  on ends with.** 
73d0: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68  EndCoroutine, th
73e0: 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61  en jump to P2 ra
73f0: 74 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e  ther than contin
7400: 75 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a  uing with the.**
7410: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
7420: 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
7430: 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  o: InitCoroutine
7440: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c  .*/.case OP_Yiel
7450: 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
7460: 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a  /* in1, jump */.
7470: 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20    int pcDest;.  
7480: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
7490: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
74a0: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
74b0: 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49  pIn1)==0 );.  pI
74c0: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
74d0: 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20  Int;.  pcDest = 
74e0: 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a  (int)pIn1->u.i;.
74f0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69    pIn1->u.i = (i
7500: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
7510: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
7520: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
7530: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63  .  pOp = &aOp[pc
7540: 44 65 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a  Dest];.  break;.
7550: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  }../* Opcode:  H
7560: 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32  altIfNull  P1 P2
7570: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
7580: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 3d  opsis: if r[P3]=
7590: 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20  null halt.**.** 
75a0: 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20  Check the value 
75b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
75c0: 20 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74   If it is NULL t
75d0: 68 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a  hen Halt using.*
75e0: 2a 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20  * parameter P1, 
75f0: 50 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66  P2, and P4 as if
7600: 20 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c   this were a Hal
7610: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  t instruction.  
7620: 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  If the.** value 
7630: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
7640: 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
7650: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   this routine is
7660: 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65   a no-op..** The
7670: 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 73 68   P5 parameter sh
7680: 6f 75 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61  ould be 1..*/.ca
7690: 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c  se OP_HaltIfNull
76a0: 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20  : {      /* in3 
76b0: 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  */.  pIn3 = &aMe
76c0: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
76d0: 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
76e0: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20   MEM_Null)==0 ) 
76f0: 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
7700: 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
7710: 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f  _Halt */.}../* O
7720: 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20  pcode:  Halt P1 
7730: 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  P2 * P4 P5.**.**
7740: 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c   Exit immediatel
7750: 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72  y.  All open cur
7760: 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c  sors, etc are cl
7770: 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69  osed.** automati
7780: 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  cally..**.** P1 
7790: 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  is the result co
77a0: 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  de returned by s
77b0: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73  qlite3_exec(), s
77c0: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a  qlite3_reset(),.
77d0: 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69  ** or sqlite3_fi
77e0: 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61  nalize().  For a
77f0: 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68   normal halt, th
7800: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c  is should be SQL
7810: 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46  ITE_OK (0)..** F
7820: 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61  or errors, it ca
7830: 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20  n be some other 
7840: 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30  value.  If P1!=0
7850: 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65   then P2 will de
7860: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
7870: 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c  er or not to rol
7880: 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e  lback the curren
7890: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  t transaction.  
78a0: 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a  Do not rollback.
78b0: 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69  ** if P2==OE_Fai
78c0: 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61  l. Do the rollba
78d0: 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c  ck if P2==OE_Rol
78e0: 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f  lback.  If P2==O
78f0: 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e  E_Abort,.** then
7900: 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68   back out all ch
7910: 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20  anges that have 
7920: 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20  occurred during 
7930: 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f  this execution o
7940: 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62  f the.** VDBE, b
7950: 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  ut do not rollba
7960: 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ck the transacti
7970: 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  on. .**.** If P4
7980: 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65   is not null the
7990: 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  n it is an error
79a0: 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e   message string.
79b0: 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76  .**.** P5 is a v
79c0: 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20 61  alue between 0 a
79d0: 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c  nd 4, inclusive,
79e0: 20 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74   that modifies t
79f0: 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a  he P4 string..**
7a00: 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63  .**    0:  (no c
7a10: 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20  hange).**    1: 
7a20: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61   NOT NULL contra
7a30: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
7a40: 2a 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20  *    2:  UNIQUE 
7a50: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7a60: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20  d: P4.**    3:  
7a70: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
7a80: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
7a90: 20 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45    4:  FOREIGN KE
7aa0: 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  Y constraint fai
7ab0: 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66  led: P4.**.** If
7ac0: 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20   P5 is not zero 
7ad0: 61 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20  and P4 is NULL, 
7ae0: 74 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20  then everything 
7af0: 61 66 74 65 72 20 74 68 65 20 22 3a 22 20 69 73  after the ":" is
7b00: 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a  .** omitted..**.
7b10: 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69  ** There is an i
7b20: 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30  mplied "Halt 0 0
7b30: 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   0" instruction 
7b40: 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20  inserted at the 
7b50: 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65  very end of.** e
7b60: 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53  very program.  S
7b70: 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68  o a jump past th
7b80: 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69  e last instructi
7b90: 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  on of the progra
7ba0: 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65  m.** is the same
7bb0: 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61   as executing Ha
7bc0: 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48  lt..*/.case OP_H
7bd0: 61 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46 72 61  alt: {.  VdbeFra
7be0: 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 6e  me *pFrame;.  in
7bf0: 74 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d 20  t pcx;..  pcx = 
7c00: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
7c10: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  ;.  if( pOp->p1=
7c20: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d  =SQLITE_OK && p-
7c30: 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f  >pFrame ){.    /
7c40: 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70  * Halt the sub-p
7c50: 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63  rogram. Return c
7c60: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61  ontrol to the pa
7c70: 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20  rent frame. */. 
7c80: 20 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70     pFrame = p->p
7c90: 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46  Frame;.    p->pF
7ca0: 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70  rame = pFrame->p
7cb0: 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e  Parent;.    p->n
7cc0: 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c  Frame--;.    sql
7cd0: 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
7ce0: 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67  es(db, p->nChang
7cf0: 65 29 3b 0a 20 20 20 20 70 63 78 20 3d 20 73 71  e);.    pcx = sq
7d00: 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65  lite3VdbeFrameRe
7d10: 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20  store(pFrame);. 
7d20: 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64     lastRowid = d
7d30: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  b->lastRowid;.  
7d40: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f    if( pOp->p2==O
7d50: 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20  E_Ignore ){.    
7d60: 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e    /* Instruction
7d70: 20 70 63 78 20 69 73 20 74 68 65 20 4f 50 5f 50   pcx is the OP_P
7d80: 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f  rogram that invo
7d90: 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67  ked the sub-prog
7da0: 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75  ram .      ** cu
7db0: 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61  rrently being ha
7dc0: 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20  lted. If the p2 
7dd0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
7de0: 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20  his OP_Halt.    
7df0: 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e    ** instruction
7e00: 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67   is set to OE_Ig
7e10: 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73  nore, then the s
7e20: 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68  ub-program is th
7e30: 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  rowing.      ** 
7e40: 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74  an IGNORE except
7e50: 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ion. In this cas
7e60: 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64  e jump to the ad
7e70: 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a  dress specified.
7e80: 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20        ** as the 
7e90: 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e  p2 of the callin
7ea0: 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a  g OP_Program.  *
7eb0: 2f 0a 20 20 20 20 20 20 70 63 78 20 3d 20 70 2d  /.      pcx = p-
7ec0: 3e 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a  >aOp[pcx].p2-1;.
7ed0: 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20      }.    aOp = 
7ee0: 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d  p->aOp;.    aMem
7ef0: 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
7f00: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d 3b  pOp = &aOp[pcx];
7f10: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
7f20: 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70    p->rc = pOp->p
7f30: 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  1;.  p->errorAct
7f40: 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ion = (u8)pOp->p
7f50: 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 78  2;.  p->pc = pcx
7f60: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
7f70: 3e 70 35 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p5>=0 && pOp->p
7f80: 35 3c 3d 34 20 29 3b 0a 20 20 69 66 28 20 70 2d  5<=4 );.  if( p-
7f90: 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70  >rc ){.    if( p
7fa0: 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20  Op->p5 ){.      
7fb0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
7fc0: 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65  r * const azType
7fd0: 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c  [] = { "NOT NULL
7fe0: 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48  ", "UNIQUE", "CH
7ff0: 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ECK",.          
8000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8020: 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22     "FOREIGN KEY"
8030: 20 7d 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   };.      testca
8040: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29  se( pOp->p5==1 )
8050: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
8060: 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a  ( pOp->p5==2 );.
8070: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
8080: 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20  pOp->p5==3 );.  
8090: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
80a0: 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20  p->p5==4 );.    
80b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
80c0: 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74 72  or(p, "%s constr
80d0: 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 61 7a  aint failed", az
80e0: 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 29  Type[pOp->p5-1])
80f0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  ;.      if( pOp-
8100: 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 20  >p4.z ){.       
8110: 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   p->zErrMsg = sq
8120: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
8130: 20 22 25 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a 45   "%z: %s", p->zE
8140: 72 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a  rrMsg, pOp->p4.z
8150: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
8160: 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
8170: 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
8180: 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  "%s", pOp->p4.z)
8190: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
81a0: 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c  te3_log(pOp->p1,
81b0: 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e   "abort at %d in
81c0: 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 78 2c   [%s]: %s", pcx,
81d0: 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72   p->zSql, p->zEr
81e0: 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20  rMsg);.  }.  rc 
81f0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  = sqlite3VdbeHal
8200: 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  t(p);.  assert( 
8210: 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
8220: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  || rc==SQLITE_OK
8230: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45   || rc==SQLITE_E
8240: 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63  RROR );.  if( rc
8250: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
8260: 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  .    p->rc = SQL
8270: 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
8280: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  e{.    assert( r
8290: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
82a0: 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51  (p->rc&0xff)==SQ
82b0: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
82c0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
82d0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
82e0: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
82f0: 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  s>0 || db->nDefe
8300: 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b  rredImmCons>0 );
8310: 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20  .    rc = p->rc 
8320: 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a  ? SQLITE_ERROR :
8330: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
8340: 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  }.  goto vdbe_re
8350: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
8360: 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50  de: Integer P1 P
8370: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
8380: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a  sis: r[P2]=P1.**
8390: 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69  .** The 32-bit i
83a0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20  nteger value P1 
83b0: 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
83c0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
83d0: 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a  case OP_Integer:
83e0: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
83f0: 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
8400: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
8410: 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
8420: 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  .i = pOp->p1;.  
8430: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8440: 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20  ode: Int64 * P2 
8450: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
8460: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
8470: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
8480: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69  er to a 64-bit i
8490: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a  nteger value..**
84a0: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
84b0: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
84c0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
84d0: 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20  nt64: {         
84e0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
84f0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
8500: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
8510: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8520: 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75  pI64!=0 );.  pOu
8530: 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70  t->u.i = *pOp->p
8540: 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
8550: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
8560: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
8570: 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  _POINT./* Opcode
8580: 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34  : Real * P2 * P4
8590: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
85a0: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
85b0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
85c0: 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  o a 64-bit float
85d0: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
85e0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
85f0: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
8600: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
8610: 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  P_Real: {       
8620: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
8630: 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a  TK_FLOAT, out2 *
8640: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
8650: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
8660: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
8670: 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61   = MEM_Real;.  a
8680: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49  ssert( !sqlite3I
8690: 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52  sNaN(*pOp->p4.pR
86a0: 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  eal) );.  pOut->
86b0: 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.r = *pOp->p4.p
86c0: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
86d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
86e0: 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32  de: String8 * P2
86f0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8700: 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a  sis: r[P2]='P4'.
8710: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
8720: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
8730: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
8740: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
8750: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
8760: 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f   into a String o
8770: 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20  pcode before it 
8780: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
8790: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20  the first time. 
87a0: 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20   During.** this 
87b0: 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20  transformation, 
87c0: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74  the length of st
87d0: 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75  ring P4 is compu
87e0: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a  ted and stored.*
87f0: 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61  * as the P1 para
8800: 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  meter..*/.case O
8810: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
8820: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
8830: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 20  TK_STRING, out2 
8840: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
8850: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
8860: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
8870: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
8880: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
8890: 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e  _String;.  pOp->
88a0: 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  p1 = sqlite3Strl
88b0: 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b  en30(pOp->p4.z);
88c0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
88d0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66  _OMIT_UTF16.  if
88e0: 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49  ( encoding!=SQLI
88f0: 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72  TE_UTF8 ){.    r
8900: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
8910: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
8920: 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51  Op->p4.z, -1, SQ
8930: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
8940: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 61  E_STATIC);.    a
8950: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
8960: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
8970: 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20 20  TE_TOOBIG );.   
8980: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
8990: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
89a0: 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20  eEncoding(pOut, 
89b0: 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f  encoding) ) goto
89c0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73   no_mem;.    ass
89d0: 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c  ert( pOut->szMal
89e0: 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d 3e 7a  loc>0 && pOut->z
89f0: 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20  Malloc==pOut->z 
8a00: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 56  );.    assert( V
8a10: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
8a20: 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70 4f  ut)==0 );.    pO
8a30: 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30  ut->szMalloc = 0
8a40: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
8a50: 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b  s |= MEM_Static;
8a60: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
8a70: 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43  type==P4_DYNAMIC
8a80: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
8a90: 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d  3DbFree(db, pOp-
8aa0: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  >p4.z);.    }.  
8ab0: 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
8ac0: 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20  P4_DYNAMIC;.    
8ad0: 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74  pOp->p4.z = pOut
8ae0: 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31  ->z;.    pOp->p1
8af0: 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a   = pOut->n;.  }.
8b00: 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d    testcase( rc==
8b10: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b  SQLITE_TOOBIG );
8b20: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
8b30: 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74  p->p1>db->aLimit
8b40: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
8b50: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
8b60: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
8b70: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
8b80: 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 2f 2a 20 46  ITE_OK );.  /* F
8b90: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
8ba0: 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50  he next case, OP
8bb0: 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a  _String */.}.  .
8bc0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
8bd0: 67 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  g P1 P2 P3 P4 P5
8be0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8bf0: 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31  P2]='P4' (len=P1
8c00: 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69  ).**.** The stri
8c10: 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c  ng value P4 of l
8c20: 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29  ength P1 (bytes)
8c30: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
8c40: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
8c50: 20 49 66 20 50 33 20 69 73 20 6e 6f 74 20 7a 65   If P3 is not ze
8c60: 72 6f 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65  ro and the conte
8c70: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
8c80: 33 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50 35  3 is equal to P5
8c90: 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64 61  , then.** the da
8ca0: 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 72 65  tatype of the re
8cb0: 67 69 73 74 65 72 20 50 32 20 69 73 20 63 6f 6e  gister P2 is con
8cc0: 76 65 72 74 65 64 20 74 6f 20 42 4c 4f 42 2e 20  verted to BLOB. 
8cd0: 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 0a   The content is.
8ce0: 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 65 71 75  ** the same sequ
8cf0: 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2c 20 69  ence of bytes, i
8d00: 74 20 69 73 20 6d 65 72 65 6c 79 20 69 6e 74 65  t is merely inte
8d10: 72 70 72 65 74 65 64 20 61 73 20 61 20 42 4c 4f  rpreted as a BLO
8d20: 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66 20  B instead.** of 
8d30: 61 20 73 74 72 69 6e 67 2c 20 61 73 20 69 66 20  a string, as if 
8d40: 69 74 20 68 61 64 20 62 65 65 6e 20 43 41 53 54  it had been CAST
8d50: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
8d60: 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28 20 50 33 21  s:.**.** if( P3!
8d70: 3d 30 20 61 6e 64 20 72 65 67 5b 50 33 5d 3d 3d  =0 and reg[P3]==
8d80: 50 35 20 29 20 72 65 67 5b 50 32 5d 20 3a 3d 20  P5 ) reg[P2] := 
8d90: 43 41 53 54 28 72 65 67 5b 50 32 5d 20 61 73 20  CAST(reg[P2] as 
8da0: 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73 65 20 4f 50  BLOB).*/.case OP
8db0: 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20  _String: {      
8dc0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
8dd0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
8de0: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  .z!=0 );.  pOut 
8df0: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
8e00: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
8e10: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
8e20: 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
8e30: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
8e40: 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
8e50: 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70  pOut->n = pOp->p
8e60: 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  1;.  pOut->enc =
8e70: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
8e80: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
8e90: 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66 20  (pOut);.#ifndef 
8ea0: 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45 53  SQLITE_LIKE_DOES
8eb0: 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a 20  NT_MATCH_BLOBS. 
8ec0: 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29   if( pOp->p3>0 )
8ed0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
8ee0: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
8ef0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
8f00: 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61  );.    pIn3 = &a
8f10: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
8f20: 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
8f30: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
8f40: 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33 2d  );.    if( pIn3-
8f50: 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70 35 20 29 20  >u.i==pOp->p5 ) 
8f60: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
8f70: 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74 69  M_Blob|MEM_Stati
8f80: 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a  c|MEM_Term;.  }.
8f90: 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a  #endif.  break;.
8fa0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
8fb0: 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ll P1 P2 P3 * *.
8fc0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
8fd0: 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a  2..P3]=NULL.**.*
8fe0: 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69  * Write a NULL i
8ff0: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32  nto registers P2
9000: 2e 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72  .  If P3 greater
9010: 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61   than P2, then a
9020: 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c  lso write.** NUL
9030: 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  L into register 
9040: 50 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67  P3 and every reg
9050: 69 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e  ister in between
9060: 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P2 and P3.  If 
9070: 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  P3.** is less th
9080: 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79  an P2 (typically
9090: 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65   P3 is zero) the
90a0: 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20  n only register 
90b0: 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  P2 is.** set to 
90c0: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  NULL..**.** If t
90d0: 68 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e  he P1 value is n
90e0: 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c  on-zero, then al
90f0: 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43  so set the MEM_C
9100: 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74  leared flag so t
9110: 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75  hat.** NULL valu
9120: 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70  es will not comp
9130: 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69  are equal even i
9140: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
9150: 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f  is set on.** OP_
9160: 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a  Ne or OP_Eq..*/.
9170: 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20  case OP_Null: { 
9180: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
9190: 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a  2 */.  int cnt;.
91a0: 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a    u16 nullFlag;.
91b0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
91c0: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
91d0: 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33  .  cnt = pOp->p3
91e0: 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65  -pOp->p2;.  asse
91f0: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
9200: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
9210: 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
9220: 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61  >flags = nullFla
9230: 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d  g = pOp->p1 ? (M
9240: 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61  EM_Null|MEM_Clea
9250: 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b  red) : MEM_Null;
9260: 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a  .  pOut->n = 0;.
9270: 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29    while( cnt>0 )
9280: 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  {.    pOut++;.  
9290: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
92a0: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
92b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
92c0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
92d0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
92e0: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 70 4f  nullFlag;.    pO
92f0: 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20 63  ut->n = 0;.    c
9300: 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  nt--;.  }.  brea
9310: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9320: 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a   SoftNull P1 * *
9330: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9340: 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a  : r[P1]=NULL.**.
9350: 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65 72 20  ** Set register 
9360: 50 31 20 74 6f 20 68 61 76 65 20 74 68 65 20 76  P1 to have the v
9370: 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65  alue NULL as see
9380: 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65  n by the OP_Make
9390: 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75  Record.** instru
93a0: 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f  ction, but do no
93b0: 74 20 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e  t free any strin
93c0: 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79  g or blob memory
93d0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
93e0: 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65 72  .** the register
93f0: 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  , so that if the
9400: 20 76 61 6c 75 65 20 77 61 73 20 61 20 73 74 72   value was a str
9410: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74  ing or blob that
9420: 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73   was.** previous
9430: 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20  ly copied using 
9440: 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f  OP_SCopy, the co
9450: 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e  pies will contin
9460: 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a  ue to be valid..
9470: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e  */.case OP_SoftN
9480: 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ull: {.  assert(
9490: 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
94a0: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p1<=(p->nMem+
94b0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
94c0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
94d0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
94e0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75  ut->flags = (pOu
94f0: 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c  t->flags|MEM_Nul
9500: 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  l)&~MEM_Undefine
9510: 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  d;.  break;.}../
9520: 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50  * Opcode: Blob P
9530: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
9540: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
9550: 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a  4 (len=P1).**.**
9560: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
9570: 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20  blob of data P1 
9580: 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f  bytes long.  Sto
9590: 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20  re this.** blob 
95a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
95b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a  */.case OP_Blob:
95c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
95d0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61    /* out2 */.  a
95e0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c  ssert( pOp->p1 <
95f0: 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  = SQLITE_MAX_LEN
9600: 47 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  GTH );.  pOut = 
9610: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
9620: 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65  , pOp);.  sqlite
9630: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
9640: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
9650: 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a  pOp->p1, 0, 0);.
9660: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
9670: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
9680: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
9690: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
96a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69  ./* Opcode: Vari
96b0: 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20  able P1 P2 * P4 
96c0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
96d0: 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50  [P2]=parameter(P
96e0: 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e  1,P4).**.** Tran
96f0: 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20  sfer the values 
9700: 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74  of bound paramet
9710: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
9720: 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20  ter P2.**.** If 
9730: 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73  the parameter is
9740: 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73   named, then its
9750: 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e   name appears in
9760: 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76   P4..** The P4 v
9770: 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20  alue is used by 
9780: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
9790: 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a  ameter_name()..*
97a0: 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62  /.case OP_Variab
97b0: 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  le: {           
97c0: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65   /* out2 */.  Me
97d0: 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f  m *pVar;       /
97e0: 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72  * Value being tr
97f0: 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20  ansferred */..  
9800: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
9810: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
9820: 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72  >nVar );.  asser
9830: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20  t( pOp->p4.z==0 
9840: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d  || pOp->p4.z==p-
9850: 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31  >azVar[pOp->p1-1
9860: 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70  ] );.  pVar = &p
9870: 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d  ->aVar[pOp->p1 -
9880: 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74   1];.  if( sqlit
9890: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
98a0: 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74  pVar) ){.    got
98b0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
98c0: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
98d0: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
98e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
98f0: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
9900: 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74  , pVar, MEM_Stat
9910: 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ic);.  UPDATE_MA
9920: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
9930: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9940: 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31   Opcode: Move P1
9950: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
9960: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 5d  nopsis: r[P2@P3]
9970: 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P3].**.** 
9980: 4d 6f 76 65 20 74 68 65 20 50 33 20 76 61 6c 75  Move the P3 valu
9990: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
99a0: 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20  1..P1+P3-1 over 
99b0: 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
99c0: 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20  s P2..P2+P3-1.  
99d0: 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  Registers P1..P1
99e0: 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66  +P3-1 are.** lef
99f0: 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c  t holding a NULL
9a00: 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  .  It is an erro
9a10: 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72  r for register r
9a20: 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b  anges.** P1..P1+
9a30: 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b  P3-1 and P2..P2+
9a40: 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e  P3-1 to overlap.
9a50: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
9a60: 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65  .** for P3 to be
9a70: 20 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f   less than 1..*/
9a80: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
9a90: 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
9aa0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9ab0: 20 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20   registers left 
9ac0: 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74  to copy */.  int
9ad0: 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   p1;          /*
9ae0: 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70   Register to cop
9af0: 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20  y from */.  int 
9b00: 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p2;          /* 
9b10: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
9b20: 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f   to */..  n = pO
9b30: 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f  p->p3;.  p1 = pO
9b40: 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
9b50: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
9b60: 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20   n>0 && p1>0 && 
9b70: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
9b80: 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32  ( p1+n<=p2 || p2
9b90: 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e  +n<=p1 );..  pIn
9ba0: 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20  1 = &aMem[p1];. 
9bb0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32   pOut = &aMem[p2
9bc0: 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73  ];.  do{.    ass
9bd0: 65 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d  ert( pOut<=&aMem
9be0: 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  [(p->nMem+1 - p-
9bf0: 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20  >nCursor)] );.  
9c00: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d    assert( pIn1<=
9c10: 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31  &aMem[(p->nMem+1
9c20: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20   - p->nCursor)] 
9c30: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
9c40: 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20  emIsValid(pIn1) 
9c50: 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  );.    memAboutT
9c60: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
9c70: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
9c80: 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70  eMemMove(pOut, p
9c90: 49 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  In1);.#ifdef SQL
9ca0: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
9cb0: 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ( pOut->pScopyFr
9cc0: 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26  om>=&aMem[p1] &&
9cd0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9ce0: 6d 3c 70 4f 75 74 20 29 7b 0a 20 20 20 20 20 20  m<pOut ){.      
9cf0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9d00: 20 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31   += pOp->p2 - p1
9d10: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
9d20: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
9d30: 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 52 45 47  e(pOut);.    REG
9d40: 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b  ISTER_TRACE(p2++
9d50: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e  , pOut);.    pIn
9d60: 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  1++;.    pOut++;
9d70: 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29  .  }while( --n )
9d80: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9d90: 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31   Opcode: Copy P1
9da0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
9db0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b  nopsis: r[P2@P3+
9dc0: 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a  1]=r[P1@P3+1].**
9dd0: 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20  .** Make a copy 
9de0: 6f 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e  of registers P1.
9df0: 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69  .P1+P3 into regi
9e00: 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e  sters P2..P2+P3.
9e10: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
9e20: 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20  ruction makes a 
9e30: 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65  deep copy of the
9e40: 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69   value.  A dupli
9e50: 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20  cate.** is made 
9e60: 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  of any string or
9e70: 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20   blob constant. 
9e80: 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f   See also OP_SCo
9e90: 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  py..*/.case OP_C
9ea0: 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  opy: {.  int n;.
9eb0: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
9ec0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9ed0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
9ee0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
9ef0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
9f00: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c  !=pIn1 );.  whil
9f10: 65 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  e( 1 ){.    sqli
9f20: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
9f30: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
9f40: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
9f50: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
9f60: 28 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53  (pOut);.#ifdef S
9f70: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
9f80: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9f90: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20   = 0;.#endif.   
9fa0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
9fb0: 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d  pOp->p2+pOp->p3-
9fc0: 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66  n, pOut);.    if
9fd0: 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65  ( (n--)==0 ) bre
9fe0: 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ak;.    pOut++;.
9ff0: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a      pIn1++;.  }.
a000: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a010: 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20  pcode: SCopy P1 
a020: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
a030: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31  psis: r[P2]=r[P1
a040: 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73  ].**.** Make a s
a050: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72  hallow copy of r
a060: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
a070: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
a080: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
a090: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c  ion makes a shal
a0a0: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20  low copy of the 
a0b0: 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76  value.  If the v
a0c0: 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72  alue.** is a str
a0d0: 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65  ing or blob, the
a0e0: 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e  n the copy is on
a0f0: 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ly a pointer to 
a100: 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
a110: 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65  and hence if the
a120: 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65   original change
a130: 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f  s so will the co
a140: 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66  py..** Worse, if
a150: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73   the original is
a160: 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68   deallocated, th
a170: 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69  e copy becomes i
a180: 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20  nvalid..** Thus 
a190: 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74  the program must
a1a0: 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20   guarantee that 
a1b0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c  the original wil
a1c0: 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20  l not change.** 
a1d0: 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74  during the lifet
a1e0: 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e  ime of the copy.
a1f0: 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f    Use OP_Copy to
a200: 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65   make a complete
a210: 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73  .** copy..*/.cas
a220: 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20  e OP_SCopy: {   
a230: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
a240: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
a250: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
a260: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
a270: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
a280: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
a290: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
a2a0: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
a2b0: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
a2c0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
a2d0: 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74  DEBUG.  if( pOut
a2e0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20  ->pScopyFrom==0 
a2f0: 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ) pOut->pScopyFr
a300: 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69  om = pIn1;.#endi
a310: 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  f.  break;.}../*
a320: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79   Opcode: IntCopy
a330: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
a340: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
a350: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e  r[P1].**.** Tran
a360: 73 66 65 72 20 74 68 65 20 69 6e 74 65 67 65 72  sfer the integer
a370: 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72   value held in r
a380: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
a390: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
a3a0: 2a 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70  ** This is an op
a3b0: 74 69 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20  timized version 
a3c0: 6f 66 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f  of SCopy that wo
a3d0: 72 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74  rks only for int
a3e0: 65 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a  eger.** values..
a3f0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f  */.case OP_IntCo
a400: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
a410: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49   /* out2 */.  pI
a420: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
a430: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
a440: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
a450: 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70  M_Int)!=0 );.  p
a460: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
a470: 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
a480: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
a490: 4f 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b  Out, pIn1->u.i);
a4a0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a4b0: 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f  Opcode: ResultRo
a4c0: 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  w P1 P2 * * *.**
a4d0: 20 53 79 6e 6f 70 73 69 73 3a 20 6f 75 74 70 75   Synopsis: outpu
a4e0: 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a  t=r[P1@P2].**.**
a4f0: 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50   The registers P
a500: 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d  1 through P1+P2-
a510: 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67  1 contain a sing
a520: 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73  le row of.** res
a530: 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64  ults. This opcod
a540: 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c  e causes the sql
a550: 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c  ite3_step() call
a560: 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a   to terminate.**
a570: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
a580: 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ROW return code 
a590: 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74  and it sets up t
a5a0: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a  he sqlite3_stmt.
a5b0: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  ** structure to 
a5c0: 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74  provide access t
a5d0: 6f 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50  o the r(P1)..r(P
a5e0: 31 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61  1+P2-1) values a
a5f0: 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  s.** the result 
a600: 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  row..*/.case OP_
a610: 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d  ResultRow: {.  M
a620: 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20  em *pMem;.  int 
a630: 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  i;.  assert( p->
a640: 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d  nResColumn==pOp-
a650: 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >p2 );.  assert(
a660: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
a670: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b  assert( pOp->p1+
a680: 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p2<=(p->nMe
a690: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
a6a0: 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20  )+1 );..#ifndef 
a6b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
a6c0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
a6d0: 2f 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72  /* Run the progr
a6e0: 65 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74  ess counter just
a6f0: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
a700: 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62  g..  */.  if( db
a710: 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20  ->xProgress!=0. 
a720: 20 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50    && nVmStep>=nP
a730: 72 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20 20 20  rogressLimit.   
a740: 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  && db->xProgress
a750: 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72  (db->pProgressAr
a760: 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72  g)!=0.  ){.    r
a770: 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
a780: 52 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61  RUPT;.    goto a
a790: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
a7a0: 72 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  r;.  }.#endif.. 
a7b0: 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74   /* If this stat
a7c0: 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74  ement has violat
a7d0: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  ed immediate for
a7e0: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
a7f0: 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f  ints, do.  ** no
a800: 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  t return the num
a810: 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69  ber of rows modi
a820: 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74  fied. And do not
a830: 20 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61   RELEASE the sta
a840: 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e  tement.  ** tran
a850: 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64  saction. It need
a860: 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  s to be rolled b
a870: 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53  ack.  */.  if( S
a880: 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20  QLITE_OK!=(rc = 
a890: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
a8a0: 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20  Fk(p, 0)) ){.   
a8b0: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61   assert( db->fla
a8c0: 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  gs&SQLITE_CountR
a8d0: 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ows );.    asser
a8e0: 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f  t( p->usesStmtJo
a8f0: 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74  urnal );.    got
a900: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
a910: 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rror;.  }..  /* 
a920: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f  If the SQLITE_Co
a930: 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20  untRows flag is 
a940: 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66  set in sqlite3.f
a950: 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
a960: 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d  .  ** DML statem
a970: 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73  ents invoke this
a980: 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72   opcode to retur
a990: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
a9a0: 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66  rows .  ** modif
a9b0: 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ied to the user.
a9c0: 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
a9d0: 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d 20  y way that a VM 
a9e0: 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20  that.  ** opens 
a9f0: 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
aa00: 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f  saction may invo
aa10: 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ke this opcode..
aa20: 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73    **.  ** In cas
aa30: 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20 61  e this is such a
aa40: 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73   statement, clos
aa50: 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20  e any statement 
aa60: 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a  transaction.  **
aa70: 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73 20   opened by this 
aa80: 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  VM before return
aa90: 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  ing control to t
aaa0: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
aab0: 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20   to.  ** ensure 
aac0: 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74  that statement-t
aad0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20  ransactions are 
aae0: 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e  always nested, n
aaf0: 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a  ot overlapping..
ab00: 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e    ** If the open
ab10: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
ab20: 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c  action is not cl
ab30: 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20  osed here, then 
ab40: 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61  the user.  ** ma
ab50: 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56  y step another V
ab60: 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73  M that opens its
ab70: 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74   own statement t
ab80: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73  ransaction. This
ab90: 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74  .  ** may lead t
aba0: 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74  o overlapping st
abb0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
abc0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
abd0: 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  The statement tr
abe0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76  ansaction is nev
abf0: 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74  er a top-level t
ac00: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e  ransaction.  Hen
ac10: 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45  ce.  ** the RELE
ac20: 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63  ASE call below c
ac30: 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20  an never fail.. 
ac40: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d   */.  assert( p-
ac50: 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c  >iStatement==0 |
ac60: 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  | db->flags&SQLI
ac70: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a  TE_CountRows );.
ac80: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
ac90: 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74  beCloseStatement
aca0: 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  (p, SAVEPOINT_RE
acb0: 4c 45 41 53 45 29 3b 0a 20 20 61 73 73 65 72 74  LEASE);.  assert
acc0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
acd0: 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64  );..  /* Invalid
ace0: 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61  ate all ephemera
acf0: 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63  l cursor row cac
ad00: 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68  hes */.  p->cach
ad10: 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65  eCtr = (p->cache
ad20: 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f  Ctr + 2)|1;..  /
ad30: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
ad40: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
ad50: 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c  urrent row are \
ad60: 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20  000 terminated. 
ad70: 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20   ** and have an 
ad80: 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20  assigned type.  
ad90: 54 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  The results are 
ada0: 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64  de-ephemeralized
adb0: 20 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20   as.  ** a side 
adc0: 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70  effect..  */.  p
add0: 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74  Mem = p->pResult
ade0: 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Set = &aMem[pOp-
adf0: 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  >p1];.  for(i=0;
ae00: 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29   i<pOp->p2; i++)
ae10: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
ae20: 6d 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69  mIsValid(&pMem[i
ae30: 5d 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65  ]) );.    Deephe
ae40: 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69  meralize(&pMem[i
ae50: 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ]);.    assert( 
ae60: 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26  (pMem[i].flags &
ae70: 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20   MEM_Ephem)==0. 
ae80: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70             || (p
ae90: 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28  Mem[i].flags & (
aea0: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
aeb0: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  ))==0 );.    sql
aec0: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65  ite3VdbeMemNulTe
aed0: 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d  rminate(&pMem[i]
aee0: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
aef0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c  TRACE(pOp->p1+i,
af00: 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a   &pMem[i]);.  }.
af10: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
af20: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
af30: 5f 6d 65 6d 3b 0a 0a 20 20 69 66 28 20 64 62 2d  _mem;..  if( db-
af40: 3e 6d 54 72 61 63 65 20 26 20 53 51 4c 49 54 45  >mTrace & SQLITE
af50: 5f 54 52 41 43 45 5f 52 4f 57 20 29 7b 0a 20 20  _TRACE_ROW ){.  
af60: 20 20 64 62 2d 3e 78 54 72 61 63 65 28 53 51 4c    db->xTrace(SQL
af70: 49 54 45 5f 54 52 41 43 45 5f 52 4f 57 2c 20 64  ITE_TRACE_ROW, d
af80: 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 70 2c  b->pTraceArg, p,
af90: 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52   0);.  }..  /* R
afa0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57  eturn SQLITE_ROW
afb0: 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20  .  */.  p->pc = 
afc0: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
afd0: 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c   + 1;.  rc = SQL
afe0: 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20  ITE_ROW;.  goto 
aff0: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
b000: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61  /* Opcode: Conca
b010: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
b020: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
b030: 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]+r[P1].**
b040: 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74  .** Add the text
b050: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b060: 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  onto the end of 
b070: 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72  the text in.** r
b080: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73  egister P2 and s
b090: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b0a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b0b0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65  ** If either the
b0c0: 20 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61   P1 or P2 text a
b0d0: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f  re NULL then sto
b0e0: 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a  re NULL in P3..*
b0f0: 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c  *.**   P3 = P2 |
b100: 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  | P1.**.** It is
b110: 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20   illegal for P1 
b120: 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65  and P3 to be the
b130: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20   same register. 
b140: 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66  Sometimes,.** if
b150: 20 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20   P3 is the same 
b160: 72 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20  register as P2, 
b170: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
b180: 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f  on is able.** to
b190: 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28   avoid a memcpy(
b1a0: 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  )..*/.case OP_Co
b1b0: 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ncat: {         
b1c0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b1d0: 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32  CONCAT, in1, in2
b1e0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
b1f0: 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d  nByte;..  pIn1 =
b200: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
b210: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
b220: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
b230: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
b240: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
b250: 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28  1!=pOut );.  if(
b260: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
b270: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
b280: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
b290: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
b2a0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
b2b0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28  break;.  }.  if(
b2c0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
b2d0: 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28  ) || ExpandBlob(
b2e0: 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn2) ) goto no_
b2f0: 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  mem;.  Stringify
b300: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
b310: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
b320: 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n2, encoding);. 
b330: 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e   nByte = pIn1->n
b340: 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66   + pIn2->n;.  if
b350: 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
b360: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
b370: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
b380: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
b390: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
b3a0: 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20  beMemGrow(pOut, 
b3b0: 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f  (int)nByte+2, pO
b3c0: 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20  ut==pIn2) ){.   
b3d0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
b3e0: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
b3f0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72  ag(pOut, MEM_Str
b400: 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70  );.  if( pOut!=p
b410: 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  In2 ){.    memcp
b420: 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d  y(pOut->z, pIn2-
b430: 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20  >z, pIn2->n);.  
b440: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74  }.  memcpy(&pOut
b450: 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49  ->z[pIn2->n], pI
b460: 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b  n1->z, pIn1->n);
b470: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
b480: 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  ]=0;.  pOut->z[n
b490: 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70  Byte+1] = 0;.  p
b4a0: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
b4b0: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
b4c0: 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
b4d0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
b4e0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
b4f0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
b500: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
b510: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20  ./* Opcode: Add 
b520: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b530: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
b540: 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]+r[P2].**.*
b550: 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20  * Add the value 
b560: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
b570: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
b580: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
b590: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
b5a0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b5b0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b5c0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b5d0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b5e0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b5f0: 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20   Multiply P1 P2 
b600: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
b610: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a  is: r[P3]=r[P1]*
b620: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d  r[P2].**.**.** M
b630: 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75  ultiply the valu
b640: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b650: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
b660: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
b670: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
b680: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b690: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b6a0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
b6b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b6c0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b6d0: 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50  e: Subtract P1 P
b6e0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b6f0: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32  psis: r[P3]=r[P2
b700: 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75  ]-r[P1].**.** Su
b710: 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65  btract the value
b720: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b730: 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69  from the value i
b740: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
b750: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b760: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b770: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b780: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b790: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b7a0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b7b0: 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32  de: Divide P1 P2
b7c0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
b7d0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
b7e0: 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76  /r[P1].**.** Div
b7f0: 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ide the value in
b800: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
b810: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
b820: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
b830: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
b840: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
b850: 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74  (P3=P2/P1). If t
b860: 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20  he value in .** 
b870: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
b880: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ero, then the re
b890: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66  sult is NULL. If
b8a0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b8b0: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72   .** NULL, the r
b8c0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b8d0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d  /./* Opcode: Rem
b8e0: 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20  ainder P1 P2 P3 
b8f0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
b900: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50   r[P3]=r[P2]%r[P
b910: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65  1].**.** Compute
b920: 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61   the remainder a
b930: 66 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67  fter integer reg
b940: 69 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69  ister P2 is divi
b950: 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73  ded by .** regis
b960: 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65  ter P1 and store
b970: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b980: 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20  egister P3. .** 
b990: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
b9a0: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
b9b0: 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69  ero the result i
b9c0: 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69  s NULL..** If ei
b9d0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
b9e0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b9f0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
ba00: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
ba10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ba20: 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20  ame as TK_PLUS, 
ba30: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
ba40: 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61  /.case OP_Subtra
ba50: 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ct:             
ba60: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d   /* same as TK_M
ba70: 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  INUS, in1, in2, 
ba80: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
ba90: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20  Multiply:       
baa0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
bab0: 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20  s TK_STAR, in1, 
bac0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
bad0: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20  e OP_Divide:    
bae0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
baf0: 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c  ame as TK_SLASH,
bb00: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
bb10: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69  */.case OP_Remai
bb20: 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  nder: {         
bb30: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
bb40: 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  REM, in1, in2, o
bb50: 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49  ut3 */.  char bI
bb60: 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72  ntint;   /* Star
bb70: 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69  ted out as two i
bb80: 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20  nteger operands 
bb90: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
bba0: 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64       /* Combined
bbb0: 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f   MEM_* flags fro
bbc0: 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f  m both inputs */
bbd0: 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20  .  u16 type1;   
bbe0: 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79     /* Numeric ty
bbf0: 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  pe of left opera
bc00: 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65  nd */.  u16 type
bc10: 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72  2;      /* Numer
bc20: 69 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74  ic type of right
bc30: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
bc40: 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iA;         /*
bc50: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
bc60: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
bc70: 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20  /.  i64 iB;     
bc80: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
bc90: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
bca0: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
bcb0: 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rA;      /* Re
bcc0: 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  al value of left
bcd0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
bce0: 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a  uble rB;      /*
bcf0: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72   Real value of r
bd00: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
bd10: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
bd20: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65  pOp->p1];.  type
bd30: 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  1 = numericType(
bd40: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
bd50: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
bd60: 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69    type2 = numeri
bd70: 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70  cType(pIn2);.  p
bd80: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
bd90: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20  >p3];.  flags = 
bda0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
bdb0: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
bdc0: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75   (flags & MEM_Nu
bdd0: 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72  ll)!=0 ) goto ar
bde0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
bdf0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28  is_null;.  if( (
be00: 74 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20  type1 & type2 & 
be10: 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20  MEM_Int)!=0 ){. 
be20: 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e     iA = pIn1->u.
be30: 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32  i;.    iB = pIn2
be40: 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69  ->u.i;.    bInti
be50: 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74  nt = 1;.    swit
be60: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
be70: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
be80: 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20  _Add:       if( 
be90: 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
bea0: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
beb0: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
bec0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
bed0: 62 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c  btract:  if( sql
bee0: 69 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42  ite3SubInt64(&iB
bef0: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
bf00: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
bf10: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
bf20: 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65  ply:  if( sqlite
bf30: 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41  3MulInt64(&iB,iA
bf40: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
bf50: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
bf60: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
bf70: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  {.        if( iA
bf80: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
bf90: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
bfa0: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
bfb0: 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d  ( iA==-1 && iB==
bfc0: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
bfd0: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20   goto fp_math;. 
bfe0: 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b         iB /= iA;
bff0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
c000: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
c010: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
c020: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
c030: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
c040: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
c050: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
c060: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
c070: 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20    iB %= iA;.    
c080: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
c090: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75   }.    }.    pOu
c0a0: 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20  t->u.i = iB;.   
c0b0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c0c0: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
c0d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e    }else{.    bIn
c0e0: 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74  tint = 0;.fp_mat
c0f0: 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69  h:.    rA = sqli
c100: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
c110: 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d  (pIn1);.    rB =
c120: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
c130: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
c140: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
c150: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
c160: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
c170: 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20     rB += rA;    
c180: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c190: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
c1a0: 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20  :    rB -= rA;  
c1b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c1c0: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
c1d0: 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b  ly:    rB *= rA;
c1e0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c1f0: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
c200: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de: {.        /*
c210: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
c220: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
c230: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
c240: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ... */.        i
c250: 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30  f( rA==(double)0
c260: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
c270: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
c280: 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d  l;.        rB /=
c290: 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   rA;.        bre
c2a0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
c2b0: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
c2c0: 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72       iA = (i64)r
c2d0: 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20  A;.        iB = 
c2e0: 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20  (i64)rB;.       
c2f0: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
c300: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
c310: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
c320: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
c330: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
c340: 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28    rB = (double)(
c350: 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20  iB % iA);.      
c360: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
c370: 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
c380: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
c390: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75  NG_POINT.    pOu
c3a0: 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20  t->u.i = rB;.   
c3b0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c3c0: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
c3d0: 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71  #else.    if( sq
c3e0: 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29  lite3IsNaN(rB) )
c3f0: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69  {.      goto ari
c400: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c410: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20  s_null;.    }.  
c420: 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42    pOut->u.r = rB
c430: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
c440: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52  Flag(pOut, MEM_R
c450: 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28  eal);.    if( ((
c460: 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d  type1|type2)&MEM
c470: 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49  _Real)==0 && !bI
c480: 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  ntint ){.      s
c490: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
c4a0: 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b  rAffinity(pOut);
c4b0: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
c4c0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74  }.  break;..arit
c4d0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c4e0: 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33  _null:.  sqlite3
c4f0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
c500: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
c510: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  ../* Opcode: Col
c520: 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a  lSeq P1 * * P4.*
c530: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
c540: 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65  nter to a CollSe
c550: 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65  q struct. If the
c560: 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20   next call to a 
c570: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  user function.**
c580: 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61   or aggregate ca
c590: 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75  lls sqlite3GetFu
c5a0: 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69  ncCollSeq(), thi
c5b0: 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  s collation sequ
c5c0: 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20  ence will.** be 
c5d0: 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69  returned. This i
c5e0: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75  s used by the bu
c5f0: 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61  ilt-in min(), ma
c600: 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29  x() and nullif()
c610: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  .** functions..*
c620: 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  *.** If P1 is no
c630: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20  t zero, then it 
c640: 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68  is a register th
c650: 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74 20  at a subsequent 
c660: 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28  min() or.** max(
c670: 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c  ) aggregate will
c680: 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68 65   set to 1 if the
c690: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20   current row is 
c6a0: 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20  not the minimum 
c6b0: 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20  or.** maximum.  
c6c0: 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72 20  The P1 register 
c6d0: 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  is initialized t
c6e0: 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73 74  o 0 by this inst
c6f0: 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
c700: 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65  he interface use
c710: 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65  d by the impleme
c720: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61  ntation of the a
c730: 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75  forementioned fu
c740: 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65  nctions.** to re
c750: 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61  trieve the colla
c760: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65  tion sequence se
c770: 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  t by this opcode
c780: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
c790: 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20  e.** publicly.  
c7a0: 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75  Only built-in fu
c7b0: 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63  nctions have acc
c7c0: 65 73 73 20 74 6f 20 74 68 69 73 20 66 65 61 74  ess to this feat
c7d0: 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
c7e0: 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73  CollSeq: {.  ass
c7f0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
c800: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
c810: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
c820: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c830: 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
c840: 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a  m[pOp->p1], 0);.
c850: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
c860: 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74  /* Opcode: Funct
c870: 69 6f 6e 30 20 50 31 20 50 32 20 50 33 20 50 34  ion0 P1 P2 P3 P4
c880: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
c890: 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32   r[P3]=func(r[P2
c8a0: 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f  @P5]).**.** Invo
c8b0: 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  ke a user functi
c8c0: 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e  on (P4 is a poin
c8d0: 74 65 72 20 74 6f 20 61 20 46 75 6e 63 44 65 66  ter to a FuncDef
c8e0: 20 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20   object that.** 
c8f0: 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63  defines the func
c900: 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72  tion) with P5 ar
c910: 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72  guments taken fr
c920: 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
c930: 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  nd.** successors
c940: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .  The result of
c950: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73   the function is
c960: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
c970: 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73  ter P3..** Regis
c980: 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20  ter P3 must not 
c990: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75  be one of the fu
c9a0: 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a  nction inputs..*
c9b0: 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d  *.** P1 is a 32-
c9c0: 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69  bit bitmask indi
c9d0: 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
c9e0: 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d  r not each argum
c9f0: 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66  ent to the .** f
ca00: 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65  unction was dete
ca10: 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e  rmined to be con
ca20: 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65  stant at compile
ca30: 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69   time. If the fi
ca40: 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
ca50: 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65  was constant the
ca60: 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73  n bit 0 of P1 is
ca70: 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73   set. This is us
ca80: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a  ed to determine.
ca90: 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20  ** whether meta 
caa0: 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20  data associated 
cab0: 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63  with a user func
cac0: 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73  tion argument us
cad0: 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74  ing the.** sqlit
cae0: 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29  e3_set_auxdata()
caf0: 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65   API may be safe
cb00: 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69  ly retained unti
cb10: 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  l the next.** in
cb20: 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  vocation of this
cb30: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
cb40: 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f  ee also: Functio
cb50: 6e 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67 46  n, AggStep, AggF
cb60: 69 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  inal.*/./* Opcod
cb70: 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50  e: Function P1 P
cb80: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
cb90: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75  nopsis: r[P3]=fu
cba0: 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  nc(r[P2@P5]).**.
cbb0: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
cbc0: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
cbd0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
cbe0: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
cbf0: 20 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20   object that.** 
cc00: 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74  contains a point
cc10: 65 72 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69  er to the functi
cc20: 6f 6e 20 74 6f 20 62 65 20 72 75 6e 29 20 77 69  on to be run) wi
cc30: 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  th P5 arguments 
cc40: 74 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d 20 72 65  taken.** from re
cc50: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 75  gister P2 and su
cc60: 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72  ccessors.  The r
cc70: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
cc80: 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 0a  ction is stored.
cc90: 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
cca0: 33 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20  3.  Register P3 
ccb0: 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20  must not be one 
ccc0: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
ccd0: 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31  inputs..**.** P1
cce0: 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74   is a 32-bit bit
ccf0: 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20  mask indicating 
cd00: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65  whether or not e
cd10: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ach argument to 
cd20: 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  the .** function
cd30: 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20   was determined 
cd40: 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61  to be constant a
cd50: 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20  t compile time. 
cd60: 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  If the first.** 
cd70: 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e  argument was con
cd80: 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30  stant then bit 0
cd90: 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54   of P1 is set. T
cda0: 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64  his is used to d
cdb0: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
cdc0: 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73  her meta data as
cdd0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
cde0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72  user function ar
cdf0: 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65  gument using the
ce00: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f  .** sqlite3_set_
ce10: 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61  auxdata() API ma
ce20: 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61  y be safely reta
ce30: 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  ined until the n
ce40: 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  ext.** invocatio
ce50: 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  n of this opcode
ce60: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63  ..**.** SQL func
ce70: 74 69 6f 6e 73 20 61 72 65 20 69 6e 69 74 69 61  tions are initia
ce80: 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f  lly coded as OP_
ce90: 46 75 6e 63 74 69 6f 6e 30 20 77 69 74 68 20 50  Function0 with P
cea0: 34 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 74 6f  4 pointing.** to
ceb0: 20 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63   a FuncDef objec
cec0: 74 2e 20 20 42 75 74 20 6f 6e 20 66 69 72 73 74  t.  But on first
ced0: 20 65 76 61 6c 75 61 74 69 6f 6e 2c 20 74 68 65   evaluation, the
cee0: 20 50 34 20 6f 70 65 72 61 6e 64 20 69 73 0a 2a   P4 operand is.*
cef0: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
cf00: 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
cf10: 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n sqlite3_contex
cf20: 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65  t object and the
cf30: 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a 20 63 68   operation.** ch
cf40: 61 6e 67 65 64 20 74 6f 20 74 68 69 73 20 4f 50  anged to this OP
cf50: 5f 46 75 6e 63 74 69 6f 6e 20 6f 70 63 6f 64 65  _Function opcode
cf60: 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20  .  In this way, 
cf70: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
cf80: 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 73 71 6c  on of.** the sql
cf90: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
cfa0: 65 63 74 20 6f 63 63 75 72 73 20 6f 6e 6c 79 20  ect occurs only 
cfb0: 6f 6e 63 65 2c 20 72 61 74 68 65 72 20 74 68 61  once, rather tha
cfc0: 6e 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a  n once for each.
cfd0: 2a 2a 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66  ** evaluation of
cfe0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
cff0: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
d000: 75 6e 63 74 69 6f 6e 30 2c 20 41 67 67 53 74 65  unction0, AggSte
d010: 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63  p, AggFinal.*/.c
d020: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30  ase OP_Function0
d030: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73  : {.  int n;.  s
d040: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
d050: 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
d060: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
d070: 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20  _FUNCDEF );.  n 
d080: 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
d090: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
d0a0: 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
d0b0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
d0c0: 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
d0d0: 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
d0e0: 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
d0f0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
d100: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b  ->nCursor)+1) );
d110: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
d120: 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
d130: 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
d140: 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c   );.  pCtx = sql
d150: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
d160: 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43  N(db, sizeof(*pC
d170: 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65  tx) + (n-1)*size
d180: 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  of(sqlite3_value
d190: 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d  *));.  if( pCtx=
d1a0: 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
d1b0: 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d  ;.  pCtx->pOut =
d1c0: 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e   0;.  pCtx->pFun
d1d0: 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
d1e0: 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d  c;.  pCtx->iOp =
d1f0: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
d200: 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65  );.  pCtx->pVdbe
d210: 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72   = p;.  pCtx->ar
d220: 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70  gc = n;.  pOp->p
d230: 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43  4type = P4_FUNCC
d240: 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43  TX;.  pOp->p4.pC
d250: 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70  tx = pCtx;.  pOp
d260: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46 75  ->opcode = OP_Fu
d270: 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c  nction;.  /* Fal
d280: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
d290: 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a  P_Function */.}.
d2a0: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
d2b0: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  : {.  int i;.  s
d2c0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
d2d0: 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
d2e0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
d2f0: 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43  _FUNCCTX );.  pC
d300: 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74  tx = pOp->p4.pCt
d310: 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  x;..  /* If this
d320: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73   function is ins
d330: 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72  ide of a trigger
d340: 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61  , the register a
d350: 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20  rray in aMem[]. 
d360: 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65   ** might change
d370: 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61   from one evalua
d380: 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74  tion to the next
d390: 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63  .  The next bloc
d3a0: 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63  k of code.  ** c
d3b0: 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20  hecks to see if 
d3c0: 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
d3d0: 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20  ay has changed, 
d3e0: 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a  and if so it.  *
d3f0: 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20  * reinitializes 
d400: 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72  the relavant par
d410: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
d420: 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74  3_context object
d430: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   */.  pOut = &aM
d440: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
d450: 66 28 20 70 43 74 78 2d 3e 70 4f 75 74 20 21 3d  f( pCtx->pOut !=
d460: 20 70 4f 75 74 20 29 7b 0a 20 20 20 20 70 43 74   pOut ){.    pCt
d470: 78 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74 3b 0a  x->pOut = pOut;.
d480: 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e      for(i=pCtx->
d490: 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d  argc-1; i>=0; i-
d4a0: 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  -) pCtx->argv[i]
d4b0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
d4c0: 2b 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d 41  +i];.  }..  memA
d4d0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d4e0: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 23 69 66  pCtx->pOut);.#if
d4f0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
d500: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43  .  for(i=0; i<pC
d510: 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a  tx->argc; i++){.
d520: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
d530: 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67  sValid(pCtx->arg
d540: 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47  v[i]) );.    REG
d550: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
d560: 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67  >p2+i, pCtx->arg
d570: 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  v[i]);.  }.#endi
d580: 66 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  f.  MemSetTypeFl
d590: 61 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 4d  ag(pCtx->pOut, M
d5a0: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78  EM_Null);.  pCtx
d5b0: 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20  ->fErrorOrAux = 
d5c0: 30 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77  0;.  db->lastRow
d5d0: 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
d5e0: 20 20 28 2a 70 43 74 78 2d 3e 70 46 75 6e 63 2d    (*pCtx->pFunc-
d5f0: 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c 20 70  >xSFunc)(pCtx, p
d600: 43 74 78 2d 3e 61 72 67 63 2c 20 70 43 74 78 2d  Ctx->argc, pCtx-
d610: 3e 61 72 67 76 29 3b 2f 2a 20 49 4d 50 3a 20 52  >argv);/* IMP: R
d620: 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
d630: 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62    lastRowid = db
d640: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
d650: 20 52 65 6d 65 6d 62 65 72 20 72 6f 77 69 64 20   Remember rowid 
d660: 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
d670: 78 53 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20  xSFunc */..  /* 
d680: 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  If the function 
d690: 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f  returned an erro
d6a0: 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65  r, throw an exce
d6b0: 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 70  ption */.  if( p
d6c0: 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
d6d0: 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78   ){.    if( pCtx
d6e0: 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  ->isError ){.   
d6f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
d700: 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
d710: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
d720: 70 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20  pCtx->pOut));.  
d730: 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69      rc = pCtx->i
d740: 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
d750: 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
d760: 65 74 65 41 75 78 44 61 74 61 28 64 62 2c 20 26  eteAuxData(db, &
d770: 70 2d 3e 70 41 75 78 44 61 74 61 2c 20 70 43 74  p->pAuxData, pCt
d780: 78 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e 70 31 29  x->iOp, pOp->p1)
d790: 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
d7a0: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
d7b0: 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  _error;.  }..  /
d7c0: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
d7d0: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
d7e0: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
d7f0: 50 33 20 2a 2f 0a 20 20 69 66 28 20 70 4f 75 74  P3 */.  if( pOut
d800: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
d810: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
d820: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
d830: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 43  hangeEncoding(pC
d840: 74 78 2d 3e 70 4f 75 74 2c 20 65 6e 63 6f 64 69  tx->pOut, encodi
d850: 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  ng);.    if( sql
d860: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
d870: 67 28 70 43 74 78 2d 3e 70 4f 75 74 29 20 29 20  g(pCtx->pOut) ) 
d880: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
d890: 7d 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  }..  REGISTER_TR
d8a0: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 43 74  ACE(pOp->p3, pCt
d8b0: 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  x->pOut);.  UPDA
d8c0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
d8d0: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 62  pCtx->pOut);.  b
d8e0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d8f0: 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32  de: BitAnd P1 P2
d900: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
d910: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  sis: r[P3]=r[P1]
d920: 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b  &r[P2].**.** Tak
d930: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41  e the bit-wise A
d940: 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
d950: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
d960: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
d970: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
d980: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
d990: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
d9a0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
d9b0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
d9c0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  /./* Opcode: Bit
d9d0: 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
d9e0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
d9f0: 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a  3]=r[P1]|r[P2].*
da00: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
da10: 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65  t-wise OR of the
da20: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
da30: 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
da40: 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72  d.** store the r
da50: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
da60: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
da70: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
da80: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
da90: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
daa0: 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31  de: ShiftLeft P1
dab0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
dac0: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
dad0: 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P2]<<r[P1].**.**
dae0: 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67   Shift the integ
daf0: 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
db00: 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c  ster P2 to the l
db10: 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  eft by the.** nu
db20: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
db30: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
db40: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
db50: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
db60: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
db70: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
db80: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
db90: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
dba0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
dbb0: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67  Opcode: ShiftRig
dbc0: 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ht P1 P2 P3 * *.
dbd0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
dbe0: 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a  3]=r[P2]>>r[P1].
dbf0: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
dc00: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
dc10: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
dc20: 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65  the right by the
dc30: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
dc40: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
dc50: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
dc60: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
dc70: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
dc80: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
dc90: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
dca0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
dcb0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
dcc0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e  */.case OP_BitAn
dcd0: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
dce0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
dcf0: 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e  _BITAND, in1, in
dd00: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
dd10: 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20  OP_BitOr:       
dd20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
dd30: 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20  me as TK_BITOR, 
dd40: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
dd50: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c  /.case OP_ShiftL
dd60: 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  eft:            
dd70: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
dd80: 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  LSHIFT, in1, in2
dd90: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
dda0: 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20  P_ShiftRight: { 
ddb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ddc0: 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20  e as TK_RSHIFT, 
ddd0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
dde0: 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36  /.  i64 iA;.  u6
ddf0: 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a  4 uA;.  i64 iB;.
de00: 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31    u8 op;..  pIn1
de10: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
de20: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
de30: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
de40: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
de50: 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p3];.  if( (pIn1
de60: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
de70: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
de80: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
de90: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
dea0: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
deb0: 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69  .  }.  iA = sqli
dec0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
ded0: 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71  pIn2);.  iB = sq
dee0: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
def0: 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20  e(pIn1);.  op = 
df00: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69  pOp->opcode;.  i
df10: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64  f( op==OP_BitAnd
df20: 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42   ){.    iA &= iB
df30: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70  ;.  }else if( op
df40: 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20  ==OP_BitOr ){.  
df50: 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65    iA |= iB;.  }e
df60: 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b  lse if( iB!=0 ){
df70: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d  .    assert( op=
df80: 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c  =OP_ShiftRight |
df90: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
dfa0: 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66  ft );..    /* If
dfb0: 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e   shifting by a n
dfc0: 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20  egative amount, 
dfd0: 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68  shift in the oth
dfe0: 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a  er direction */.
dff0: 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a      if( iB<0 ){.
e000: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
e010: 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f  _ShiftRight==OP_
e020: 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20  ShiftLeft+1 );. 
e030: 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53       op = 2*OP_S
e040: 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f  hiftLeft + 1 - o
e050: 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42  p;.      iB = iB
e060: 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36  >(-64) ? -iB : 6
e070: 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  4;.    }..    if
e080: 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20  ( iB>=64 ){.    
e090: 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c    iA = (iA>=0 ||
e0a0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
e0b0: 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20  t) ? 0 : -1;.   
e0c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65   }else{.      me
e0d0: 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73  mcpy(&uA, &iA, s
e0e0: 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20  izeof(uA));.    
e0f0: 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69    if( op==OP_Shi
e100: 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20  ftLeft ){.      
e110: 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20    uA <<= iB;.   
e120: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
e130: 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20    uA >>= iB;.   
e140: 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74       /* Sign-ext
e150: 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73  end on a right s
e160: 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69  hift of a negati
e170: 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  ve number */.   
e180: 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29 20       if( iA<0 ) 
e190: 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78  uA |= ((((u64)0x
e1a0: 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30  ffffffff)<<32)|0
e1b0: 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36  xffffffff) << (6
e1c0: 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20  4-iB);.      }. 
e1d0: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c       memcpy(&iA,
e1e0: 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29   &uA, sizeof(iA)
e1f0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  );.    }.  }.  p
e200: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20  Out->u.i = iA;. 
e210: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
e220: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
e230: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
e240: 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50  pcode: AddImm  P
e250: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
e260: 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 72 5b  nopsis: r[P1]=r[
e270: 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64  P1]+P2.** .** Ad
e280: 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50  d the constant P
e290: 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  2 to the value i
e2a0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
e2b0: 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20  * The result is 
e2c0: 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65  always an intege
e2d0: 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63  r..**.** To forc
e2e0: 65 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74  e any register t
e2f0: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c  o be an integer,
e300: 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a   just add 0..*/.
e310: 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20  case OP_AddImm: 
e320: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
e330: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
e340: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
e350: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
e360: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73  ge(p, pIn1);.  s
e370: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
e380: 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
e390: 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f   pIn1->u.i += pO
e3a0: 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  p->p2;.  break;.
e3b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  }../* Opcode: Mu
e3c0: 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20  stBeInt P1 P2 * 
e3d0: 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65  * *.** .** Force
e3e0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
e3f0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
e400: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
e410: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
e420: 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P1 is not an int
e430: 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20  eger and cannot 
e440: 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
e450: 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  o an integer.** 
e460: 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73  without data los
e470: 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  s, then jump imm
e480: 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20  ediately to P2, 
e490: 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72  or if P2==0.** r
e4a0: 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d  aise an SQLITE_M
e4b0: 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f  ISMATCH exceptio
e4c0: 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  n..*/.case OP_Mu
e4d0: 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20  stBeInt: {      
e4e0: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
e4f0: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
e500: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
e510: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
e520: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
e530: 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
e540: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
e550: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65  E_AFF_NUMERIC, e
e560: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64  ncoding);.    Vd
e570: 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70  beBranchTaken((p
e580: 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
e590: 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20  nt)==0, 2);.    
e5a0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
e5b0: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
e5c0: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
e5d0: 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  >p2==0 ){.      
e5e0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49    rc = SQLITE_MI
e5f0: 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20  SMATCH;.        
e600: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
e610: 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
e620: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f  else{.        go
e630: 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
e640: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
e650: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
e660: 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29  g(pIn1, MEM_Int)
e670: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
e680: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e690: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
e6a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
e6b0: 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20  Affinity P1 * * 
e6c0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67  * *.**.** If reg
e6d0: 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61  ister P1 holds a
e6e0: 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72  n integer conver
e6f0: 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76  t it to a real v
e700: 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  alue..**.** This
e710: 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
e720: 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20  when extracting 
e730: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
e740: 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a   a column that.*
e750: 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e  * has REAL affin
e760: 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d  ity.  Such colum
e770: 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69  n values may sti
e780: 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a  ll be stored as.
e790: 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72  ** integers, for
e7a0: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63   space efficienc
e7b0: 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74  y, but after ext
e7c0: 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20  raction we want 
e7d0: 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20  them.** to have 
e7e0: 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75  only a real valu
e7f0: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  e..*/.case OP_Re
e800: 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20  alAffinity: {   
e810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e820: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
e830: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
e840: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
e850: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
e860: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
e870: 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29  MemRealify(pIn1)
e880: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
e890: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
e8a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
e8b0: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73  T./* Opcode: Cas
e8c0: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
e8d0: 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e   Synopsis: affin
e8e0: 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a  ity(r[P1]).**.**
e8f0: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
e900: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
e910: 74 6f 20 62 65 20 74 68 65 20 74 79 70 65 20 64  to be the type d
e920: 65 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a  efined by P2..**
e930: 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69   .** <ul>.** <li
e940: 20 76 61 6c 75 65 3d 22 39 37 22 3e 20 54 45 58   value="97"> TEX
e950: 54 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  T.** <li value="
e960: 39 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69  98"> BLOB.** <li
e970: 20 76 61 6c 75 65 3d 22 39 39 22 3e 20 4e 55 4d   value="99"> NUM
e980: 45 52 49 43 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75  ERIC.** <li valu
e990: 65 3d 22 31 30 30 22 3e 20 49 4e 54 45 47 45 52  e="100"> INTEGER
e9a0: 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31  .** <li value="1
e9b0: 30 31 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75  01"> REAL.** </u
e9c0: 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  l>.**.** A NULL 
e9d0: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
e9e0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
e9f0: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
ea00: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
ea10: 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Cast: {      
ea20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
ea30: 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  n1 */.  assert( 
ea40: 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f  pOp->p2>=SQLITE_
ea50: 41 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70 2d  AFF_BLOB && pOp-
ea60: 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2<=SQLITE_AFF_
ea70: 52 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63 61  REAL );.  testca
ea80: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
ea90: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a  ITE_AFF_TEXT );.
eaa0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
eab0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
eac0: 42 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74 63 61  BLOB );.  testca
ead0: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
eae0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
eaf0: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
eb00: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
eb10: 46 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20 20  FF_INTEGER );.  
eb20: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
eb30: 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  2==SQLITE_AFF_RE
eb40: 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  AL );.  pIn1 = &
eb50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
eb60: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
eb70: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63  e(p, pIn1);.  rc
eb80: 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
eb90: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
eba0: 62 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c 20  beMemCast(pIn1, 
ebb0: 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e  pOp->p2, encodin
ebc0: 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  g);.  UPDATE_MAX
ebd0: 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
ebe0: 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
ebf0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
ec00: 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
ec10: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
ec20: 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f  _OMIT_CAST */../
ec30: 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20  * Opcode: Eq P1 
ec40: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
ec50: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
ec60: 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43  ]==r[P1].**.** C
ec70: 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65  ompare the value
ec80: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
ec90: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67   and P3.  If reg
eca0: 28 50 33 29 3d 3d 72 65 67 28 50 31 29 20 74 68  (P3)==reg(P1) th
ecb0: 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64  en.** jump to ad
ecc0: 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69 66  dress P2.  Or if
ecd0: 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52   the SQLITE_STOR
ece0: 45 50 32 20 66 6c 61 67 20 69 73 20 73 65 74 20  EP2 flag is set 
ecf0: 69 6e 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 73  in P5, then.** s
ed00: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
ed10: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 6e  of comparison in
ed20: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
ed30: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
ed40: 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20  FF_MASK portion 
ed50: 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e  of P5 must be an
ed60: 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63   affinity charac
ed70: 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f  ter -.** SQLITE_
ed80: 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45  AFF_TEXT, SQLITE
ed90: 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e  _AFF_INTEGER, an
eda0: 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61  d so forth. An a
edb0: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a  ttempt is made .
edc0: 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74  ** to coerce bot
edd0: 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69  h inputs accordi
ede0: 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e  ng to this affin
edf0: 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a  ity before the.*
ee00: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  * comparison is 
ee10: 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c  made. If the SQL
ee20: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20  ITE_AFF_MASK is 
ee30: 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72  0x00, then numer
ee40: 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69  ic.** affinity i
ee50: 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61  s used. Note tha
ee60: 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63  t the affinity c
ee70: 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73  onversions are s
ee80: 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e  tored.** back in
ee90: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
eea0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
eeb0: 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64  .  So this opcod
eec0: 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70  e can cause.** p
eed0: 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65  ersistent change
eee0: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  s to registers P
eef0: 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  1 and P3..**.** 
ef00: 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73  Once any convers
ef10: 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20  ions have taken 
ef20: 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68  place, and neith
ef30: 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  er value is NULL
ef40: 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  , .** the values
ef50: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49   are compared. I
ef60: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
ef70: 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d  e blobs then mem
ef80: 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64  cmp() is.** used
ef90: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
efa0: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
efb0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
efc0: 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20   both values.** 
efd0: 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74  are text, then t
efe0: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63  he appropriate c
eff0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
f000: 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a  n specified in.*
f010: 2a 20 50 34 20 69 73 20 75 73 65 64 20 74 6f 20  * P4 is used to 
f020: 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  do the compariso
f030: 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  n.  If P4 is not
f040: 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a   specified then.
f050: 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75  ** memcmp() is u
f060: 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  sed to compare t
f070: 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20  ext string.  If 
f080: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a  both values are.
f090: 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e  ** numeric, then
f0a0: 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61   a numeric compa
f0b0: 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49  rison is used. I
f0c0: 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73  f the two values
f0d0: 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65  .** are of diffe
f0e0: 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e  rent types, then
f0f0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e   numbers are con
f100: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
f110: 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64  n.** strings and
f120: 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e   strings are con
f130: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
f140: 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49  n blobs..**.** I
f150: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
f160: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
f170: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
f180: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
f190: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
f1a0: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
f1b0: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
f1c0: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
f1d0: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
f1e0: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
f1f0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
f200: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
f210: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
f220: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
f230: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
f240: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
f250: 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75  is NULL the resu
f260: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
f270: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
f280: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
f290: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
f2a0: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
f2b0: 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53  .**.** If both S
f2c0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61 6e  QLITE_STOREP2 an
f2d0: 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c  d SQLITE_KEEPNUL
f2e0: 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20  L flags are set 
f2f0: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74  then the.** cont
f300: 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73 20  ent of r[P2] is 
f310: 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20  only changed if 
f320: 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73  the new value is
f330: 20 4e 55 4c 4c 20 6f 72 20 30 20 28 66 61 6c 73   NULL or 0 (fals
f340: 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  e)..** In other 
f350: 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72  words, a prior r
f360: 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20  [P2] value will 
f370: 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74 74  not be overwritt
f380: 65 6e 20 62 79 20 31 20 28 74 72 75 65 29 2e 0a  en by 1 (true)..
f390: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  */./* Opcode: Ne
f3a0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
f3b0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20  ** Synopsis: IF 
f3c0: 72 5b 50 33 5d 21 3d 72 5b 50 31 5d 0a 2a 2a 0a  r[P3]!=r[P1].**.
f3d0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
f3e0: 73 74 20 6c 69 6b 65 20 74 68 65 20 45 71 20 6f  st like the Eq o
f3f0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
f400: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
f410: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
f420: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
f430: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
f440: 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65  e not equal.  Se
f450: 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65 20  e the Eq opcode 
f460: 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  for.** additiona
f470: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
f480: 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53 51 4c  *.** If both SQL
f490: 49 54 45 5f 53 54 4f 52 45 50 32 20 61 6e 64 20  ITE_STOREP2 and 
f4a0: 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20  SQLITE_KEEPNULL 
f4b0: 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 74 68  flags are set th
f4c0: 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e  en the.** conten
f4d0: 74 20 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e  t of r[P2] is on
f4e0: 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20 74 68  ly changed if th
f4f0: 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 4e  e new value is N
f500: 55 4c 4c 20 6f 72 20 31 20 28 74 72 75 65 29 2e  ULL or 1 (true).
f510: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
f520: 64 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32  ds, a prior r[P2
f530: 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74  ] value will not
f540: 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
f550: 62 79 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2f  by 0 (false)..*/
f560: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50  ./* Opcode: Lt P
f570: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
f580: 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b   Synopsis: IF r[
f590: 50 33 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P3]<r[P1].**.** 
f5a0: 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75  Compare the valu
f5b0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
f5c0: 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65  1 and P3.  If re
f5d0: 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68  g(P3)<reg(P1) th
f5e0: 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64  en.** jump to ad
f5f0: 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69 66  dress P2.  Or if
f600: 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52   the SQLITE_STOR
f610: 45 50 32 20 66 6c 61 67 20 69 73 20 73 65 74 20  EP2 flag is set 
f620: 69 6e 20 50 35 20 73 74 6f 72 65 0a 2a 2a 20 74  in P5 store.** t
f630: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
f640: 70 61 72 69 73 6f 6e 20 28 30 20 6f 72 20 31 20  parison (0 or 1 
f650: 6f 72 20 4e 55 4c 4c 29 20 69 6e 74 6f 20 72 65  or NULL) into re
f660: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
f670: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
f680: 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66  UMPIFNULL bit of
f690: 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65   P5 is set and e
f6a0: 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72  ither reg(P1) or
f6b0: 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e  .** reg(P3) is N
f6c0: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 74 61 6b  ULL then the tak
f6d0: 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20  e the jump.  If 
f6e0: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
f6f0: 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73  FNULL .** bit is
f700: 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c   clear then fall
f710: 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68   through if eith
f720: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
f730: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  LL..**.** The SQ
f740: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f  LITE_AFF_MASK po
f750: 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74  rtion of P5 must
f760: 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20   be an affinity 
f770: 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53  character -.** S
f780: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
f790: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
f7a0: 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ER, and so forth
f7b0: 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20  . An attempt is 
f7c0: 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72  made .** to coer
f7d0: 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61  ce both inputs a
f7e0: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73  ccording to this
f7f0: 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65   affinity before
f800: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
f810: 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74  on is made. If t
f820: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
f830: 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e  SK is 0x00, then
f840: 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69   numeric.** affi
f850: 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f  nity is used. No
f860: 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69  te that the affi
f870: 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73  nity conversions
f880: 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62   are stored.** b
f890: 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70  ack into the inp
f8a0: 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20  ut registers P1 
f8b0: 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73  and P3.  So this
f8c0: 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73   opcode can caus
f8d0: 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20  e.** persistent 
f8e0: 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73  changes to regis
f8f0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a  ters P1 and P3..
f900: 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63  **.** Once any c
f910: 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20  onversions have 
f920: 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64  taken place, and
f930: 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69   neither value i
f940: 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20  s NULL, .** the 
f950: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
f960: 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c  red. If both val
f970: 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68  ues are blobs th
f980: 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a  en memcmp() is.*
f990: 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  * used to determ
f9a0: 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ine the results 
f9b0: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
f9c0: 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  n.  If both valu
f9d0: 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20  es.** are text, 
f9e0: 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72  then the appropr
f9f0: 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  iate collating f
fa00: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
fa10: 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75  d in.** P4 is  u
fa20: 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f  sed to do the co
fa30: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34  mparison.  If P4
fa40: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
fa50: 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70  d then.** memcmp
fa60: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  () is used to co
fa70: 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e  mpare text strin
fa80: 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  g.  If both valu
fa90: 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69  es are.** numeri
faa0: 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69  c, then a numeri
fab0: 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  c comparison is 
fac0: 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f  used. If the two
fad0: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f   values.** are o
fae0: 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  f different type
faf0: 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20  s, then numbers 
fb00: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
fb10: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69  ess than.** stri
fb20: 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20  ngs and strings 
fb30: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
fb40: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
fb50: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65  */./* Opcode: Le
fb60: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
fb70: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20  ** Synopsis: IF 
fb80: 72 5b 50 33 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a  r[P3]<=r[P1].**.
fb90: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
fba0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
fbb0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
fbc0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
fbd0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
fbe0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
fbf0: 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61  r P3 is less tha
fc00: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
fc10: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
fc20: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
fc30: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
fc40: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
fc50: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
fc60: 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20  * Opcode: Gt P1 
fc70: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
fc80: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
fc90: 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68  ]>r[P1].**.** Th
fca0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
fcb0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
fcc0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
fcd0: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
fce0: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
fcf0: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
fd00: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
fd10: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
fd20: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
fd30: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
fd40: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
fd50: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
fd60: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50  ./* Opcode: Ge P
fd70: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
fd80: 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b   Synopsis: IF r[
fd90: 50 33 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P3]>=r[P1].**.**
fda0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
fdb0: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
fdc0: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
fdd0: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
fde0: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
fdf0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
fe00: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
fe10: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
fe20: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
fe30: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
fe40: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
fe50: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
fe60: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
fe70: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20  case OP_Eq:     
fe80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
fe90: 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70  e as TK_EQ, jump
fea0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
feb0: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20  se OP_Ne:       
fec0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
fed0: 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20  as TK_NE, jump, 
fee0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
fef0: 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20   OP_Lt:         
ff00: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ff10: 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LT, jump, in
ff20: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
ff30: 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Le:           
ff40: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ff50: 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_LE, jump, in1,
ff60: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
ff70: 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Gt:             
ff80: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ff90: 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GT, jump, in1, i
ffa0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65  n3 */.case OP_Ge
ffb0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
ffc0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45  /* same as TK_GE
ffd0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
ffe0: 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 2c 20 72   */.  int res, r
fff0: 65 73 32 3b 20 20 20 20 20 20 2f 2a 20 52 65 73  es2;      /* Res
10000 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ult of the compa
10010 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67  rison of pIn1 ag
10020 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20  ainst pIn3 */.  
10030 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
10040 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
10050 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61  to use for compa
10060 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66  rison */.  u16 f
10070 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f  lags1;         /
10080 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
10090 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d  l value of pIn1-
100a0 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20  >flags */.  u16 
100b0 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20  flags3;         
100c0 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69  /* Copy of initi
100d0 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33  al value of pIn3
100e0 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49  ->flags */..  pI
100f0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
10100 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
10110 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
10120 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66  flags1 = pIn1->f
10130 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d  lags;.  flags3 =
10140 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn3->flags;.  
10150 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c  if( (flags1 | fl
10160 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29  ags3)&MEM_Null )
10170 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  {.    /* One or 
10180 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
10190 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66  e NULL */.    if
101a0 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
101b0 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20  TE_NULLEQ ){.   
101c0 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f     /* If SQLITE_
101d0 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77  NULLEQ is set (w
101e0 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68  hich will only h
101f0 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65  appen if the ope
10200 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a  rator is.      *
10210 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65  * OP_Eq or OP_Ne
10220 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  ) then take the 
10230 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65  jump or not depe
10240 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
10250 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74  .      ** or not
10260 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
10270 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a  re null..      *
10280 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
10290 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
102a0 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  Eq || pOp->opcod
102b0 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
102c0 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67 73    assert( (flags
102d0 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29  1 & MEM_Cleared)
102e0 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  ==0 );.      ass
102f0 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
10300 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
10310 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  L)==0 );.      i
10320 66 28 20 28 66 6c 61 67 73 31 26 66 6c 61 67 73  f( (flags1&flags
10330 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20  3&MEM_Null)!=0. 
10340 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33        && (flags3
10350 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30  &MEM_Cleared)==0
10360 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
10370 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4f    res = 0;  /* O
10380 70 65 72 61 6e 64 73 20 61 72 65 20 65 71 75 61  perands are equa
10390 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  l */.      }else
103a0 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
103b0 31 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20  1;  /* Operands 
103c0 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f  are not equal */
103d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
103e0 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c  se{.      /* SQL
103f0 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c  ITE_NULLEQ is cl
10400 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74  ear and at least
10410 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20   one operand is 
10420 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74  NULL,.      ** t
10430 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
10440 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20  s always NULL.. 
10450 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70       ** The jump
10460 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
10470 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
10480 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20  LL bit is set.. 
10490 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
104a0 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
104b0 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
104c0 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d        pOut = &aM
104d0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
104e0 20 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20       iCompare = 
104f0 31 3b 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e 64  1;    /* Operand
10500 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20  s are not equal 
10510 2a 2f 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  */.        memAb
10520 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
10530 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20 4d 65  Out);.        Me
10540 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
10550 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
10560 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
10570 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
10580 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ut);.      }else
10590 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72  {.        VdbeBr
105a0 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a  anchTaken(2,3);.
105b0 20 20 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d          if( pOp-
105c0 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d  >p5 & SQLITE_JUM
105d0 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20  PIFNULL ){.     
105e0 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
105f0 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a  o_p2;.        }.
10600 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
10610 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  eak;.    }.  }el
10620 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68  se{.    /* Neith
10630 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
10640 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72  LL.  Do a compar
10650 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66  ison. */.    aff
10660 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20  inity = pOp->p5 
10670 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  & SQLITE_AFF_MAS
10680 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e  K;.    if( affin
10690 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity>=SQLITE_AFF_
106a0 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 20  NUMERIC ){.     
106b0 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66   if( (flags1 | f
106c0 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74 72 20 29  lags3)&MEM_Str )
106d0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 66  {.        if( (f
106e0 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74  lags1 & (MEM_Int
106f0 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74  |MEM_Real|MEM_St
10700 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a  r))==MEM_Str ){.
10710 20 20 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e            applyN
10720 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
10730 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20 20 20  In1,0);.        
10740 20 20 74 65 73 74 63 61 73 65 28 20 66 6c 61 67    testcase( flag
10750 73 33 21 3d 70 49 6e 33 2d 3e 66 6c 61 67 73 20  s3!=pIn3->flags 
10760 29 3b 20 2f 2a 20 50 6f 73 73 69 62 6c 65 20 69  ); /* Possible i
10770 66 20 70 49 6e 31 3d 3d 70 49 6e 33 20 2a 2f 0a  f pIn1==pIn3 */.
10780 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 73 33            flags3
10790 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a   = pIn3->flags;.
107a0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
107b0 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26 20    if( (flags3 & 
107c0 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
107d0 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d  l|MEM_Str))==MEM
107e0 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20  _Str ){.        
107f0 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
10800 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b 0a  finity(pIn3,0);.
10810 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
10820 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e 64 6c  }.      /* Handl
10830 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  e the common cas
10840 65 20 6f 66 20 69 6e 74 65 67 65 72 20 63 6f 6d  e of integer com
10850 70 61 72 69 73 6f 6e 20 68 65 72 65 2c 20 61 73  parison here, as
10860 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 70 74   an.      ** opt
10870 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20 61 76  imization, to av
10880 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f 20 73 71  oid a call to sq
10890 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
108a0 29 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28  ) */.      if( (
108b0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49  pIn1->flags & pI
108c0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
108d0 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  Int)!=0 ){.     
108e0 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69     if( pIn3->u.i
108f0 20 3e 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20   > pIn1->u.i ){ 
10900 72 65 73 20 3d 20 2b 31 3b 20 67 6f 74 6f 20 63  res = +1; goto c
10910 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20  ompare_op; }.   
10920 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75       if( pIn3->u
10930 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69 20 29  .i < pIn1->u.i )
10940 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f 74 6f  { res = -1; goto
10950 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20   compare_op; }. 
10960 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a         res = 0;.
10970 20 20 20 20 20 20 20 20 67 6f 74 6f 20 63 6f 6d          goto com
10980 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20 20 7d  pare_op;.      }
10990 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61  .    }else if( a
109a0 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
109b0 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  AFF_TEXT ){.    
109c0 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20    if( (flags1 & 
109d0 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28  MEM_Str)==0 && (
109e0 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e  flags1 & (MEM_In
109f0 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20  t|MEM_Real))!=0 
10a00 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  ){.        testc
10a10 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
10a20 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
10a30 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10a40 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10a50 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20  M_Real );.      
10a60 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10a70 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20  Stringify(pIn1, 
10a80 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20  encoding, 1);.  
10a90 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10aa0 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79 6e 29  (flags1&MEM_Dyn)
10ab0 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73   != (pIn1->flags
10ac0 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20  &MEM_Dyn) );.   
10ad0 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20 28 70       flags1 = (p
10ae0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45  In1->flags & ~ME
10af0 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
10b00 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79 70 65  lags1 & MEM_Type
10b10 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 20 20 61  Mask);.        a
10b20 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 49 6e  ssert( pIn1!=pIn
10b30 33 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3 );.      }.   
10b40 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26     if( (flags3 &
10b50 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20   MEM_Str)==0 && 
10b60 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49  (flags3 & (MEM_I
10b70 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30  nt|MEM_Real))!=0
10b80 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74   ){.        test
10b90 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67  case( pIn3->flag
10ba0 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
10bb0 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10bc0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
10bd0 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20  EM_Real );.     
10be0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10bf0 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33 2c  mStringify(pIn3,
10c00 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20   encoding, 1);. 
10c10 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10c20 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79 6e   (flags3&MEM_Dyn
10c30 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ) != (pIn3->flag
10c40 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  s&MEM_Dyn) );.  
10c50 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 28        flags3 = (
10c60 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e 4d  pIn3->flags & ~M
10c70 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
10c80 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79 70  flags3 & MEM_Typ
10c90 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a  eMask);.      }.
10ca0 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
10cb0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
10cc0 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70  4_COLLSEQ || pOp
10cd0 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b  ->p4.pColl==0 );
10ce0 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74  .    res = sqlit
10cf0 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e  e3MemCompare(pIn
10d00 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34  3, pIn1, pOp->p4
10d10 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63 6f 6d  .pColl);.  }.com
10d20 70 61 72 65 5f 6f 70 3a 0a 20 20 73 77 69 74 63  pare_op:.  switc
10d30 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
10d40 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71  {.    case OP_Eq
10d50 3a 20 20 20 20 72 65 73 32 20 3d 20 72 65 73 3d  :    res2 = res=
10d60 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
10d70 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20     case OP_Ne:  
10d80 20 20 72 65 73 32 20 3d 20 72 65 73 3b 20 20 20    res2 = res;   
10d90 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
10da0 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72  case OP_Lt:    r
10db0 65 73 32 20 3d 20 72 65 73 3c 30 3b 20 20 20 20  es2 = res<0;    
10dc0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
10dd0 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 32  e OP_Le:    res2
10de0 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62   = res<=0;     b
10df0 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
10e00 50 5f 47 74 3a 20 20 20 20 72 65 73 32 20 3d 20  P_Gt:    res2 = 
10e10 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61  res>0;      brea
10e20 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
10e30 20 20 20 20 20 20 72 65 73 32 20 3d 20 72 65 73        res2 = res
10e40 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  >=0;     break;.
10e50 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61    }..  /* Undo a
10e60 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  ny changes made 
10e70 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  by applyAffinity
10e80 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20  () to the input 
10e90 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20  registers. */.  
10ea0 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
10eb0 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20  lags & MEM_Dyn) 
10ec0 3d 3d 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  == (flags1 & MEM
10ed0 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 31 2d  _Dyn) );.  pIn1-
10ee0 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 31 3b  >flags = flags1;
10ef0 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33  .  assert( (pIn3
10f00 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
10f10 6e 29 20 3d 3d 20 28 66 6c 61 67 73 33 20 26 20  n) == (flags3 & 
10f20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49  MEM_Dyn) );.  pI
10f30 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67  n3->flags = flag
10f40 73 33 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e  s3;..  if( pOp->
10f50 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
10f60 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20  EP2 ){.    pOut 
10f70 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
10f80 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d  ;.    iCompare =
10f90 20 72 65 73 3b 0a 20 20 20 20 72 65 73 32 20 3d   res;.    res2 =
10fa0 20 72 65 73 32 21 3d 30 3b 20 20 2f 2a 20 46 6f   res2!=0;  /* Fo
10fb0 72 20 74 68 69 73 20 70 61 74 68 20 72 65 73 32  r this path res2
10fc0 20 6d 75 73 74 20 62 65 20 65 78 61 63 74 6c 79   must be exactly
10fd0 20 30 20 6f 72 20 31 20 2a 2f 0a 20 20 20 20 69   0 or 1 */.    i
10fe0 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51  f( (pOp->p5 & SQ
10ff0 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 29 21 3d  LITE_KEEPNULL)!=
11000 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68  0 ){.      /* Th
11010 65 20 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 20  e KEEPNULL flag 
11020 70 72 65 76 65 6e 74 73 20 4f 50 5f 45 71 20 66  prevents OP_Eq f
11030 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67 20  rom overwriting 
11040 61 20 4e 55 4c 4c 20 77 69 74 68 20 31 0a 20 20  a NULL with 1.  
11050 20 20 20 20 2a 2a 20 61 6e 64 20 70 72 65 76 65      ** and preve
11060 6e 74 73 20 4f 50 5f 4e 65 20 66 72 6f 6d 20 6f  nts OP_Ne from o
11070 76 65 72 77 72 69 74 69 6e 67 20 4e 55 4c 4c 20  verwriting NULL 
11080 77 69 74 68 20 30 2e 20 20 54 68 69 73 20 66 6c  with 0.  This fl
11090 61 67 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 6f  ag.      ** is o
110a0 6e 6c 79 20 75 73 65 64 20 69 6e 20 63 6f 6e 74  nly used in cont
110b0 65 78 74 73 20 77 68 65 72 65 20 65 69 74 68 65  exts where eithe
110c0 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 28 31  r:.      **   (1
110d0 29 20 6f 70 3d 3d 4f 50 5f 45 71 20 26 26 20 28  ) op==OP_Eq && (
110e0 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72  r[P2]==NULL || r
110f0 5b 50 32 5d 3d 3d 30 29 0a 20 20 20 20 20 20 2a  [P2]==0).      *
11100 2a 20 20 20 28 32 29 20 6f 70 3d 3d 4f 50 5f 4e  *   (2) op==OP_N
11110 65 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c  e && (r[P2]==NUL
11120 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29 0a 20  L || r[P2]==1). 
11130 20 20 20 20 20 2a 2a 20 54 68 65 72 65 66 6f 72       ** Therefor
11140 65 20 69 74 20 69 73 20 6e 6f 74 20 6e 65 63 65  e it is not nece
11150 73 73 61 72 79 20 74 6f 20 63 68 65 63 6b 20 74  ssary to check t
11160 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b  he content of r[
11170 50 32 5d 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a  P2] for.      **
11180 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20 20 20   NULL. */.      
11190 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
111a0 6f 64 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20 70 4f  ode==OP_Ne || pO
111b0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71  p->opcode==OP_Eq
111c0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
111d0 28 20 72 65 73 32 3d 3d 30 20 7c 7c 20 72 65 73  ( res2==0 || res
111e0 32 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65  2==1 );.      te
111f0 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 30 20  stcase( res2==0 
11200 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  && pOp->opcode==
11210 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 74  OP_Eq );.      t
11220 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 31  estcase( res2==1
11230 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   && pOp->opcode=
11240 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20  =OP_Eq );.      
11250 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d  testcase( res2==
11260 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  0 && pOp->opcode
11270 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20  ==OP_Ne );.     
11280 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d   testcase( res2=
11290 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64  =1 && pOp->opcod
112a0 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
112b0 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f    if( (pOp->opco
112c0 64 65 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65 73 32  de==OP_Eq)==res2
112d0 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a   ) break;.    }.
112e0 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
112f0 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
11300 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
11310 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
11320 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
11330 3d 20 72 65 73 32 3b 0a 20 20 20 20 52 45 47 49  = res2;.    REGI
11340 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
11350 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  p2, pOut);.  }el
11360 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
11370 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20  chTaken(res!=0, 
11380 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54  (pOp->p5 & SQLIT
11390 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a  E_NULLEQ)?2:3);.
113a0 20 20 20 20 69 66 28 20 72 65 73 32 20 29 7b 0a      if( res2 ){.
113b0 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
113c0 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  to_p2;.    }.  }
113d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
113e0 4f 70 63 6f 64 65 3a 20 45 6c 73 65 4e 6f 74 45  Opcode: ElseNotE
113f0 71 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  q * P2 * * *.**.
11400 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6d  ** This opcode m
11410 75 73 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ust immediately 
11420 66 6f 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c 74 20  follow an OP_Lt 
11430 6f 72 20 4f 50 5f 47 74 20 63 6f 6d 70 61 72 69  or OP_Gt compari
11440 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 2a 2a  son operator..**
11450 20 49 66 20 72 65 73 75 6c 74 20 6f 66 20 61 6e   If result of an
11460 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f   OP_Eq compariso
11470 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 77  n on the same tw
11480 6f 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77 6f  o operands.** wo
11490 75 6c 64 20 68 61 76 65 20 62 65 20 4e 55 4c 4c  uld have be NULL
114a0 20 6f 72 20 66 61 6c 73 65 20 28 30 29 2c 20 74   or false (0), t
114b0 68 65 6e 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  hen then jump to
114c0 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P2. .** If the 
114d0 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50 5f  result of an OP_
114e0 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e  Eq comparison on
114f0 20 74 68 65 20 74 77 6f 20 70 72 65 76 69 6f 75   the two previou
11500 73 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77 6f  s operands.** wo
11510 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 74 72  uld have been tr
11520 75 65 20 28 31 29 2c 20 74 68 65 6e 20 66 61 6c  ue (1), then fal
11530 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61  l through..*/.ca
11540 73 65 20 4f 50 5f 45 6c 73 65 4e 6f 74 45 71 3a  se OP_ElseNotEq:
11550 20 7b 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65   {       /* same
11560 20 61 73 20 54 4b 5f 45 53 43 41 50 45 2c 20 6a   as TK_ESCAPE, j
11570 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
11580 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 61 73   pOp>aOp );.  as
11590 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
115a0 63 6f 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c 20 70  code==OP_Lt || p
115b0 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
115c0 50 5f 47 74 20 29 3b 0a 20 20 61 73 73 65 72 74  P_Gt );.  assert
115d0 28 20 70 4f 70 5b 2d 31 5d 2e 70 35 20 26 20 53  ( pOp[-1].p5 & S
115e0 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 3b  QLITE_STOREP2 );
115f0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
11600 65 6e 28 69 43 6f 6d 70 61 72 65 21 3d 30 2c 20  en(iCompare!=0, 
11610 32 29 3b 0a 20 20 69 66 28 20 69 43 6f 6d 70 61  2);.  if( iCompa
11620 72 65 21 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  re!=0 ) goto jum
11630 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
11640 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
11650 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a   Permutation * *
11660 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65   * P4 *.**.** Se
11670 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  t the permutatio
11680 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50  n used by the OP
11690 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f  _Compare operato
116a0 72 20 74 6f 20 62 65 20 74 68 65 20 61 72 72 61  r to be the arra
116b0 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  y.** of integers
116c0 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68   in P4..**.** Th
116d0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73  e permutation is
116e0 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69   only valid unti
116f0 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f  l the next OP_Co
11700 6d 70 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a  mpare that has.*
11710 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52  * the OPFLAG_PER
11720 4d 55 54 45 20 62 69 74 20 73 65 74 20 69 6e 20  MUTE bit set in 
11730 50 35 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68  P5. Typically th
11740 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
11750 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75   should .** occu
11760 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72  r immediately pr
11770 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f  ior to the OP_Co
11780 6d 70 61 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mpare..**.** The
11790 20 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 69   first integer i
117a0 6e 20 74 68 65 20 50 34 20 69 6e 74 65 67 65 72  n the P4 integer
117b0 20 61 72 72 61 79 20 69 73 20 74 68 65 20 6c 65   array is the le
117c0 6e 67 74 68 20 6f 66 20 74 68 65 20 61 72 72 61  ngth of the arra
117d0 79 0a 2a 2a 20 61 6e 64 20 64 6f 65 73 20 6e 6f  y.** and does no
117e0 74 20 62 65 63 6f 6d 65 20 70 61 72 74 20 6f 66  t become part of
117f0 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
11800 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72  ..*/.case OP_Per
11810 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73  mutation: {.  as
11820 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
11830 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29  e==P4_INTARRAY )
11840 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
11850 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72  >p4.ai );.  aPer
11860 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  mute = pOp->p4.a
11870 69 20 2b 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  i + 1;.  break;.
11880 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
11890 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50  mpare P1 P2 P3 P
118a0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
118b0 3a 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72  : r[P1@P3] <-> r
118c0 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f  [P2@P3].**.** Co
118d0 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72  mpare two vector
118e0 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69  s of registers i
118f0 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50  n reg(P1)..reg(P
11900 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68  1+P3-1) (call th
11910 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22  is.** vector "A"
11920 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29  ) and in reg(P2)
11930 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28  ..reg(P2+P3-1) (
11940 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20  "B").  Save the 
11950 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65  result of.** the
11960 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20   comparison for 
11970 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20  use by the next 
11980 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74  OP_Jump instruct
11990 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61  ..**.** If P5 ha
119a0 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52  s the OPFLAG_PER
119b0 4d 55 54 45 20 62 69 74 20 73 65 74 2c 20 74 68  MUTE bit set, th
119c0 65 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  en the order of 
119d0 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a  comparison is.**
119e0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
119f0 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
11a00 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70  P_Permutation op
11a10 65 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a  erator.  If the.
11a20 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  ** OPFLAG_PERMUT
11a30 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20  E bit is clear, 
11a40 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 61 72  then register ar
11a50 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65  e compared in se
11a60 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65  quential.** orde
11a70 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  r..**.** P4 is a
11a80 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
11a90 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  re that defines 
11aa0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11ab0 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20  ces and sort.** 
11ac0 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63  orders for the c
11ad0 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20  omparison.  The 
11ae0 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c  permutation appl
11af0 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ies to registers
11b00 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b  .** only.  The K
11b10 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20  eyInfo elements 
11b20 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74  are used sequent
11b30 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ially..**.** The
11b40 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
11b50 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e   sort comparison
11b60 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61  , so NULLs compa
11b70 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c  re equal,.** NUL
11b80 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  Ls are less than
11b90 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72   numbers, number
11ba0 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
11bb0 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20  strings,.** and 
11bc0 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73  strings are less
11bd0 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a   than blobs..*/.
11be0 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a  case OP_Compare:
11bf0 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e   {.  int n;.  in
11c00 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20  t i;.  int p1;. 
11c10 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74   int p2;.  const
11c20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
11c30 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  fo;.  int idx;. 
11c40 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b   CollSeq *pColl;
11c50 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
11c60 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65   sequence to use
11c70 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f   on this term */
11c80 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20  .  int bRev;    
11c90 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f        /* True fo
11ca0 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72  r DESCENDING sor
11cb0 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69 66  t order */..  if
11cc0 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  ( (pOp->p5 & OPF
11cd0 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20  LAG_PERMUTE)==0 
11ce0 29 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a  ) aPermute = 0;.
11cf0 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
11d00 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
11d10 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
11d20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20  assert( n>0 );. 
11d30 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
11d40 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70  o!=0 );.  p1 = p
11d50 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
11d60 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49  Op->p2;.#if SQLI
11d70 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61  TE_DEBUG.  if( a
11d80 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69  Permute ){.    i
11d90 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20  nt k, mx = 0;.  
11da0 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20    for(k=0; k<n; 
11db0 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74  k++) if( aPermut
11dc0 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61  e[k]>mx ) mx = a
11dd0 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20  Permute[k];.    
11de0 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
11df0 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p1+mx<=(p->nMem+
11e00 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
11e10 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
11e20 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d   p2>0 && p2+mx<=
11e30 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
11e40 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
11e50 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
11e60 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c  t( p1>0 && p1+n<
11e70 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
11e80 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
11e90 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
11ea0 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  && p2+n<=(p->nMe
11eb0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
11ec0 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  )+1 );.  }.#endi
11ed0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
11ee0 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20  G */.  for(i=0; 
11ef0 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<n; i++){.    i
11f00 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20  dx = aPermute ? 
11f10 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b  aPermute[i] : i;
11f20 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
11f30 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31  IsValid(&aMem[p1
11f40 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73  +idx]) );.    as
11f50 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
11f60 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20  (&aMem[p2+idx]) 
11f70 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
11f80 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61  TRACE(p1+idx, &a
11f90 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p1+idx]);.  
11fa0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
11fb0 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70  (p2+idx, &aMem[p
11fc0 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73  2+idx]);.    ass
11fd0 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d  ert( i<pKeyInfo-
11fe0 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70  >nField );.    p
11ff0 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  Coll = pKeyInfo-
12000 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62  >aColl[i];.    b
12010 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  Rev = pKeyInfo->
12020 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20  aSortOrder[i];. 
12030 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71     iCompare = sq
12040 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
12050 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26  &aMem[p1+idx], &
12060 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43  aMem[p2+idx], pC
12070 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43  oll);.    if( iC
12080 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20  ompare ){.      
12090 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70  if( bRev ) iComp
120a0 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b  are = -iCompare;
120b0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
120c0 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75    }.  }.  aPermu
120d0 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  te = 0;.  break;
120e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  .}../* Opcode: J
120f0 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ump P1 P2 P3 * *
12100 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
12110 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  he instruction a
12120 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32  t address P1, P2
12130 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e  , or P3 dependin
12140 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
12150 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  in the most rece
12160 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e  nt OP_Compare in
12170 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31  struction the P1
12180 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73   vector was less
12190 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74   than.** equal t
121a0 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  o, or greater th
121b0 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72  an the P2 vector
121c0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a  , respectively..
121d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a  */.case OP_Jump:
121e0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
121f0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
12200 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20  iCompare<0 ){.  
12210 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
12220 6e 28 30 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61  n(0,3); pOp = &a
12230 4f 70 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b  Op[pOp->p1 - 1];
12240 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f  .  }else if( iCo
12250 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20  mpare==0 ){.    
12260 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
12270 31 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70  1,3); pOp = &aOp
12280 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20  [pOp->p2 - 1];. 
12290 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
122a0 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29  BranchTaken(2,3)
122b0 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70  ; pOp = &aOp[pOp
122c0 2d 3e 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20  ->p3 - 1];.  }. 
122d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
122e0 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20  code: And P1 P2 
122f0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
12300 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d  is: r[P3]=(r[P1]
12310 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a   && r[P2]).**.**
12320 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61   Take the logica
12330 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c  l AND of the val
12340 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  ues in registers
12350 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
12360 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75  * write the resu
12370 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  lt into register
12380 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69   P3..**.** If ei
12390 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73  ther P1 or P2 is
123a0 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20   0 (false) then 
123b0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20  the result is 0 
123c0 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  even if.** the o
123d0 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
123e0 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20  LL.  A NULL and 
123f0 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  true or two NULL
12400 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c  s give.** a NULL
12410 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f   output..*/./* O
12420 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20  pcode: Or P1 P2 
12430 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
12440 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d  is: r[P3]=(r[P1]
12450 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a   || r[P2]).**.**
12460 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61   Take the logica
12470 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75  l OR of the valu
12480 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
12490 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
124a0 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72  store the answer
124b0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
124c0 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
124d0 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e   P1 or P2 is non
124e0 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e  zero (true) then
124f0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31   the result is 1
12500 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20   (true).** even 
12510 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70  if the other inp
12520 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e  ut is NULL.  A N
12530 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72  ULL and false or
12540 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69   two NULLs.** gi
12550 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74  ve a NULL output
12560 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64  ..*/.case OP_And
12570 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
12580 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44  * same as TK_AND
12590 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
125a0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20   */.case OP_Or: 
125b0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
125c0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20   same as TK_OR, 
125d0 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
125e0 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f  /.  int v1;    /
125f0 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20  * Left operand: 
12600 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52   0==FALSE, 1==TR
12610 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f  UE, 2==UNKNOWN o
12620 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20  r NULL */.  int 
12630 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20  v2;    /* Right 
12640 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53  operand: 0==FALS
12650 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55  E, 1==TRUE, 2==U
12660 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a  NKNOWN or NULL *
12670 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
12680 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
12690 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
126a0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
126b0 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v1 = 2;.  }else{
126c0 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65  .    v1 = sqlite
126d0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
126e0 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49  n1)!=0;.  }.  pI
126f0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
12700 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d  p2];.  if( pIn2-
12710 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
12720 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b  l ){.    v2 = 2;
12730 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32  .  }else{.    v2
12740 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
12750 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b  tValue(pIn2)!=0;
12760 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
12770 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29  opcode==OP_And )
12780 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
12790 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
127a0 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b   and_logic[] = {
127b0 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20   0, 0, 0, 0, 1, 
127c0 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20  2, 0, 2, 2 };.  
127d0 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63    v1 = and_logic
127e0 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c  [v1*3+v2];.  }el
127f0 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  se{.    static c
12800 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
12810 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20  ar or_logic[] = 
12820 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c  { 0, 1, 2, 1, 1,
12830 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20   1, 2, 1, 2 };. 
12840 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63     v1 = or_logic
12850 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20  [v1*3+v2];.  }. 
12860 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
12870 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31  p->p3];.  if( v1
12880 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65  ==2 ){.    MemSe
12890 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
128a0 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c  MEM_Null);.  }el
128b0 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  se{.    pOut->u.
128c0 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53  i = v1;.    MemS
128d0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
128e0 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20   MEM_Int);.  }. 
128f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12900 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20  code: Not P1 P2 
12910 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
12920 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d  s: r[P2]= !r[P1]
12930 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
12940 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
12950 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62  gister P1 as a b
12960 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53  oolean value.  S
12970 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c  tore the.** bool
12980 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  ean complement i
12990 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
129a0 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
129b0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a  register P1 is .
129c0 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20  ** NULL, then a 
129d0 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69  NULL is stored i
129e0 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
129f0 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  _Not: {         
12a00 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
12a10 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f  s TK_NOT, in1, o
12a20 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
12a30 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
12a40 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
12a50 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
12a60 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
12a70 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70  (pOut);.  if( (p
12a80 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
12a90 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
12aa0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
12ab0 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
12ac0 2d 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33  ->u.i = !sqlite3
12ad0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
12ae0 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
12af0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
12b00 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  itNot P1 P2 * * 
12b10 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
12b20 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a  [P1]= ~r[P1].**.
12b30 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
12b40 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
12b50 73 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e  ster P1 as an in
12b60 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68  teger.  Store th
12b70 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65  e.** ones-comple
12b80 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76  ment of the P1 v
12b90 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
12ba0 65 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f  er P2.  If P1 ho
12bb0 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68  lds.** a NULL th
12bc0 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  en store a NULL 
12bd0 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P2..*/.case O
12be0 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20  P_BitNot: {     
12bf0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
12c00 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e  as TK_BITNOT, in
12c10 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
12c20 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
12c30 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
12c40 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
12c50 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
12c60 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66  Null(pOut);.  if
12c70 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
12c80 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
12c90 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
12ca0 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
12cb0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c  pOut->u.i = ~sql
12cc0 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
12cd0 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
12ce0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
12cf0 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20  e: Once P1 P2 * 
12d00 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  * *.**.** If the
12d10 20 50 31 20 76 61 6c 75 65 20 69 73 20 65 71 75   P1 value is equ
12d20 61 6c 20 74 6f 20 74 68 65 20 50 31 20 76 61 6c  al to the P1 val
12d30 75 65 20 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69  ue on the OP_Ini
12d40 74 20 6f 70 63 6f 64 65 20 61 74 0a 2a 2a 20 69  t opcode at.** i
12d50 6e 73 74 72 75 63 74 69 6f 6e 20 30 2c 20 74 68  nstruction 0, th
12d60 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  en jump to P2.  
12d70 49 66 20 74 68 65 20 74 77 6f 20 50 31 20 76 61  If the two P1 va
12d80 6c 75 65 73 20 64 69 66 66 65 72 2c 20 74 68 65  lues differ, the
12d90 6e 0a 2a 2a 20 73 65 74 20 74 68 65 20 50 31 20  n.** set the P1 
12da0 76 61 6c 75 65 20 6f 6e 20 74 68 69 73 20 6f 70  value on this op
12db0 63 6f 64 65 20 74 6f 20 65 71 75 61 6c 20 74 68  code to equal th
12dc0 65 20 50 31 20 76 61 6c 75 65 20 6f 6e 20 74 68  e P1 value on th
12dd0 65 20 4f 50 5f 49 6e 69 74 0a 2a 2a 20 61 6e 64  e OP_Init.** and
12de0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a   fall through..*
12df0 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20  /.case OP_Once: 
12e00 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
12e10 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
12e20 74 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 6f 70 63  t( p->aOp[0].opc
12e30 6f 64 65 3d 3d 4f 50 5f 49 6e 69 74 20 29 3b 0a  ode==OP_Init );.
12e40 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
12e50 6e 28 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3d 3d  n(p->aOp[0].p1==
12e60 70 4f 70 2d 3e 70 31 2c 20 32 29 3b 0a 20 20 69  pOp->p1, 2);.  i
12e70 66 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3d  f( p->aOp[0].p1=
12e80 3d 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  =pOp->p1 ){.    
12e90 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
12ea0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f  .  }else{.    pO
12eb0 70 2d 3e 70 31 20 3d 20 70 2d 3e 61 4f 70 5b 30  p->p1 = p->aOp[0
12ec0 5d 2e 70 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ].p1;.  }.  brea
12ed0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
12ee0 20 49 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a   If P1 P2 P3 * *
12ef0 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
12f00 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
12f10 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
12f20 20 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75   true.  The valu
12f30 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72  e.** is consider
12f40 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73  ed true if it is
12f50 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e   numeric and non
12f60 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76  -zero.  If the v
12f70 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
12f80 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
12f90 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20  the jump if and 
12fa0 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f  only if P3 is no
12fb0 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70  n-zero..*/./* Op
12fc0 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50  code: IfNot P1 P
12fd0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
12fe0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
12ff0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
13000 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20  er P1 is False. 
13010 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
13020 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73   considered fals
13030 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75  e if it has a nu
13040 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a  meric value of z
13050 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
13060 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
13070 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
13080 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e  e jump if and on
13090 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  ly if P3 is non-
130a0 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
130b0 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20  _If:            
130c0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
130d0 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  1 */.case OP_IfN
130e0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
130f0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
13100 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31  .  int c;.  pIn1
13110 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
13120 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
13130 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
13140 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e  ){.    c = pOp->
13150 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66  p3;.  }else{.#if
13160 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13170 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
13180 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64     c = sqlite3Vd
13190 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
131a0 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63  !=0;.#else.    c
131b0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
131c0 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  alValue(pIn1)!=0
131d0 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  .0;.#endif.    i
131e0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
131f0 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21  OP_IfNot ) c = !
13200 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  c;.  }.  VdbeBra
13210 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32  nchTaken(c!=0, 2
13220 29 3b 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20  );.  if( c ){.  
13230 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
13240 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
13250 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73  }../* Opcode: Is
13260 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
13270 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
13280 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74   r[P1]==NULL got
13290 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
132a0 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
132b0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
132c0 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
132d0 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
132e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
132f0 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
13300 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
13310 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
13320 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61  ->p1];.  VdbeBra
13330 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d  nchTaken( (pIn1-
13340 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
13350 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  l)!=0, 2);.  if(
13360 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
13370 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a  MEM_Null)!=0 ){.
13380 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
13390 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
133a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
133b0 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20  NotNull P1 P2 * 
133c0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
133d0 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20   if r[P1]!=NULL 
133e0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75  goto P2.**.** Ju
133f0 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
13400 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
13410 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P1 is not NULL
13420 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  .  .*/.case OP_N
13430 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  otNull: {       
13440 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
13450 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70  TK_NOTNULL, jump
13460 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
13470 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
13480 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
13490 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ken( (pIn1->flag
134a0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
134b0 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  , 2);.  if( (pIn
134c0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
134d0 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67  ull)==0 ){.    g
134e0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
134f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
13500 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d  /* Opcode: Colum
13510 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
13520 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
13530 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74  P3]=PX.**.** Int
13540 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20  erpret the data 
13550 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
13560 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74  oints to as a st
13570 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73  ructure built us
13580 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52  ing.** the MakeR
13590 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
135a0 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b  n.  (See the Mak
135b0 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66  eRecord opcode f
135c0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  or additional.**
135d0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
135e0 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  ut the format of
135f0 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74   the data.)  Ext
13600 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63  ract the P2-th c
13610 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68  olumn.** from th
13620 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74  is record.  If t
13630 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
13640 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61  at (P2+1) .** va
13650 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  lues in the reco
13660 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55  rd, extract a NU
13670 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  LL..**.** The va
13680 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73  lue extracted is
13690 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
136a0 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
136b0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
136c0 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20  ains fewer than 
136d0 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20  P2 fields, then 
136e0 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20  extract a NULL. 
136f0 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50   Or,.** if the P
13700 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  4 argument is a 
13710 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76  P4_MEM use the v
13720 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61  alue of the P4 a
13730 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68  rgument as.** th
13740 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20  e result..**.** 
13750 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c  If the OPFLAG_CL
13760 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20  EARCACHE bit is 
13770 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31  set on P5 and P1
13780 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62   is a pseudo-tab
13790 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  le cursor,.** th
137a0 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20  en the cache of 
137b0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65  the cursor is re
137c0 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74  set prior to ext
137d0 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75  racting the colu
137e0 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  mn..** The first
137f0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e   OP_Column again
13800 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  st a pseudo-tabl
13810 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75  e after the valu
13820 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  e of the content
13830 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73  .** register has
13840 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20   changed should 
13850 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65  have this bit se
13860 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
13870 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
13880 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45   and OPFLAG_TYPE
13890 4f 46 41 52 47 20 62 69 74 73 20 61 72 65 20 73  OFARG bits are s
138a0 65 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a  et on P5 when.**
138b0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 67   the result is g
138c0 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c  uaranteed to onl
138d0 79 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65  y be used as the
138e0 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c   argument of a l
138f0 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79  ength().** or ty
13900 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c  peof() function,
13910 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
13920 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c  The loading of l
13930 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62  arge blobs can b
13940 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72  e.** skipped for
13950 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c   length() and al
13960 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e  l content loadin
13970 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64  g can be skipped
13980 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a   for typeof()..*
13990 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e  /.case OP_Column
139a0 3a 20 7b 0a 20 20 69 6e 74 20 70 32 3b 20 20 20  : {.  int p2;   
139b0 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75           /* colu
139c0 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74  mn number to ret
139d0 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43  rieve */.  VdbeC
139e0 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a  ursor *pC;    /*
139f0 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
13a00 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a   */.  BtCursor *
13a10 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20  pCrsr;   /* The 
13a20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a  BTree cursor */.
13a30 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20    u32 *aOffset; 
13a40 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b       /* aOffset[
13a50 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20  i] is offset to 
13a60 73 74 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f  start of data fo
13a70 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f  r i-th column */
13a80 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20  .  int len;     
13a90 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e        /* The len
13aa0 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61  gth of the seria
13ab0 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74  lized data for t
13ac0 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  he column */.  i
13ad0 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
13ae0 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
13af0 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73  r */.  Mem *pDes
13b00 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65  t;        /* Whe
13b10 72 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20  re to write the 
13b20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75 65 20  extracted value 
13b30 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20  */.  Mem sMem;  
13b40 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73          /* For s
13b50 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72  toring the recor
13b60 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
13b70 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
13b80 44 61 74 61 3b 20 20 20 2f 2a 20 50 61 72 74 20  Data;   /* Part 
13b90 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  of the record be
13ba0 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
13bb0 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b   const u8 *zHdr;
13bc0 20 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61      /* Next unpa
13bd0 72 73 65 64 20 62 79 74 65 20 6f 66 20 74 68 65  rsed byte of the
13be0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e   header */.  con
13bf0 73 74 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20  st u8 *zEndHdr; 
13c00 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69  /* Pointer to fi
13c10 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20 74  rst byte after t
13c20 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75  he header */.  u
13c30 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20  32 offset;      
13c40 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f    /* Offset into
13c50 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75   the data */.  u
13c60 36 34 20 6f 66 66 73 65 74 36 34 3b 20 20 20 20  64 offset64;    
13c70 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 66 66 73    /* 64-bit offs
13c80 65 74 20 2a 2f 0a 20 20 75 33 32 20 61 76 61 69  et */.  u32 avai
13c90 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
13ca0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
13cb0 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20   available data 
13cc0 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20  */.  u32 t;     
13cd0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70          /* A typ
13ce0 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  e code from the 
13cf0 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f  record header */
13d00 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20  .  Mem *pReg;   
13d10 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54        /* PseudoT
13d20 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73  able input regis
13d30 74 65 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20 70  ter */..  pC = p
13d40 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
13d50 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
13d60 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63  ;..  /* If the c
13d70 75 72 73 6f 72 20 63 61 63 68 65 20 69 73 20 73  ursor cache is s
13d80 74 61 6c 65 2c 20 62 72 69 6e 67 20 69 74 20 75  tale, bring it u
13d90 70 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72  p-to-date */.  r
13da0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
13db0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26 70 43 2c  ursorMoveto(&pC,
13dc0 20 26 70 32 29 3b 0a 20 20 69 66 28 20 72 63 20   &p2);.  if( rc 
13dd0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
13de0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 61 73  _to_error;..  as
13df0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
13e00 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
13e10 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
13e20 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20  sor) );.  pDest 
13e30 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
13e40 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
13e50 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
13e60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
13e70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
13e80 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
13e90 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
13ea0 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43  .  assert( p2<pC
13eb0 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 4f  ->nField );.  aO
13ec0 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66  ffset = pC->aOff
13ed0 73 65 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  set;.  assert( p
13ee0 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
13ef0 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61  TYPE_VTAB );.  a
13f00 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
13f10 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45  ype!=CURTYPE_PSE
13f20 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52  UDO || pC->nullR
13f30 6f 77 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ow );.  assert( 
13f40 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55  pC->eCurType!=CU
13f50 52 54 59 50 45 5f 53 4f 52 54 45 52 20 29 3b 0a  RTYPE_SORTER );.
13f60 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65  .  if( pC->cache
13f70 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68 65  Status!=p->cache
13f80 43 74 72 20 29 7b 20 20 20 20 20 20 20 20 20 20  Ctr ){          
13f90 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a 41        /*OPTIMIZA
13fa0 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a  TION-IF-FALSE*/.
13fb0 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c      if( pC->null
13fc0 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66 28  Row ){.      if(
13fd0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
13fe0 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 29 7b  URTYPE_PSEUDO ){
13ff0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
14000 20 70 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61   pC->uc.pseudoTa
14010 62 6c 65 52 65 67 3e 30 20 29 3b 0a 20 20 20 20  bleReg>0 );.    
14020 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d      pReg = &aMem
14030 5b 70 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61  [pC->uc.pseudoTa
14040 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20 20 20  bleReg];.       
14050 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66   assert( pReg->f
14060 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
14070 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
14080 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
14090 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  eg) );.        p
140a0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
140b0 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61   pC->szRow = ava
140c0 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20  il = pReg->n;.  
140d0 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
140e0 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20   (u8*)pReg->z;. 
140f0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
14100 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
14110 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
14120 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  ;.        goto o
14130 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
14140 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
14150 0a 20 20 20 20 20 20 70 43 72 73 72 20 3d 20 70  .      pCrsr = p
14160 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
14170 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
14180 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
14190 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
141a0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
141b0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
141c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
141d0 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
141e0 29 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 70  ) );.      pC->p
141f0 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 73 71 6c  ayloadSize = sql
14200 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64  ite3BtreePayload
14210 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20 20 20  Size(pCrsr);.   
14220 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71     pC->aRow = sq
14230 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61  lite3BtreePayloa
14240 64 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61  dFetch(pCrsr, &a
14250 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 61 73 73  vail);.      ass
14260 65 72 74 28 20 61 76 61 69 6c 3c 3d 36 35 35 33  ert( avail<=6553
14270 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d  6 );  /* Maximum
14280 20 70 61 67 65 20 73 69 7a 65 20 69 73 20 36 34   page size is 64
14290 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  KiB */.      if(
142a0 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
142b0 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29   <= (u32)avail )
142c0 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a  {.        pC->sz
142d0 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61  Row = pC->payloa
142e0 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c  dSize;.      }el
142f0 73 65 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f  se if( pC->paylo
14300 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62  adSize > (u32)db
14310 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
14320 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
14330 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  .        goto to
14340 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 65 6c  o_big;.      }el
14350 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  se{.        pC->
14360 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20  szRow = avail;. 
14370 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
14380 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
14390 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a   = p->cacheCtr;.
143a0 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
143b0 65 74 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32  et = getVarint32
143c0 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66 66 73 65  (pC->aRow, offse
143d0 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72  t);.    pC->nHdr
143e0 50 61 72 73 65 64 20 3d 20 30 3b 0a 20 20 20 20  Parsed = 0;.    
143f0 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20 6f 66 66  aOffset[0] = off
14400 73 65 74 3b 0a 0a 0a 20 20 20 20 69 66 28 20 61  set;...    if( a
14410 76 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b 20 20  vail<offset ){  
14420 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49      /*OPTIMIZATI
14430 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
14440 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20      /* pC->aRow 
14450 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f  does not have to
14460 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65   hold the entire
14470 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f 65   row, but it doe
14480 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20  s at least.     
14490 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76 65   ** need to cove
144a0 72 20 74 68 65 20 68 65 61 64 65 72 20 6f 66 20  r the header of 
144b0 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66 20  the record.  If 
144c0 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f  pC->aRow does no
144d0 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20  t contain.      
144e0 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  ** the complete 
144f0 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65 74  header, then set
14500 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72   it to zero, for
14510 63 69 6e 67 20 74 68 65 20 68 65 61 64 65 72 20  cing the header 
14520 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64  to be.      ** d
14530 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
14540 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ated. */.      p
14550 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20  C->aRow = 0;.   
14560 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30     pC->szRow = 0
14570 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  ;..      /* Make
14580 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74 20   sure a corrupt 
14590 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74  database has not
145a0 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65   given us an ove
145b0 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20  rsize header..  
145c0 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e      ** Do this n
145d0 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f  ow to avoid an o
145e0 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61  versize memory a
145f0 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20  llocation..     
14600 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 54 79 70   **.      ** Typ
14610 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65  e entries can be
14620 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35   between 1 and 5
14630 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75   bytes each.  Bu
14640 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20  t 4 and 5 byte. 
14650 20 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73       ** types us
14660 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73  e so much data s
14670 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65 20  pace that there 
14680 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36  can only be 4096
14690 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 20   and 32 of.     
146a0 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63   ** them, respec
146b0 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20  tively.  So the 
146c0 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c  maximum header l
146d0 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66 72  ength results fr
146e0 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d  om a.      ** 3-
146f0 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65 61  byte type for ea
14700 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75  ch of the maximu
14710 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d  m of 32768 colum
14720 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20  ns plus three.  
14730 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74      ** extra byt
14740 65 73 20 66 6f 72 20 74 68 65 20 68 65 61 64 65  es for the heade
14750 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e  r length itself.
14760 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20    32768*3 + 3 = 
14770 39 38 33 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a  98307..      */.
14780 20 20 20 20 20 20 69 66 28 20 6f 66 66 73 65 74        if( offset
14790 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f 66 66 73   > 98307 || offs
147a0 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64  et > pC->payload
147b0 53 69 7a 65 20 29 7b 0a 20 20 20 20 20 20 20 20  Size ){.        
147c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
147d0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
147e0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
147f0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
14800 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28   }.    }else if(
14810 20 6f 66 66 73 65 74 3e 30 20 29 7b 20 2f 2a 4f   offset>0 ){ /*O
14820 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 54  PTIMIZATION-IF-T
14830 52 55 45 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 54  RUE*/.      /* T
14840 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74  he following got
14850 6f 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  o is an optimiza
14860 74 69 6f 6e 2e 20 20 49 74 20 63 61 6e 20 62 65  tion.  It can be
14870 20 6f 6d 69 74 74 65 64 20 61 6e 64 0a 20 20 20   omitted and.   
14880 20 20 20 2a 2a 20 65 76 65 72 79 74 68 69 6e 67     ** everything
14890 20 77 69 6c 6c 20 73 74 69 6c 6c 20 77 6f 72 6b   will still work
148a0 2e 20 20 42 75 74 20 4f 50 5f 43 6f 6c 75 6d 6e  .  But OP_Column
148b0 20 69 73 20 6d 65 61 73 75 72 61 62 6c 79 20 66   is measurably f
148c0 61 73 74 65 72 0a 20 20 20 20 20 20 2a 2a 20 62  aster.      ** b
148d0 79 20 73 6b 69 70 70 69 6e 67 20 74 68 65 20 73  y skipping the s
148e0 75 62 73 65 71 75 65 6e 74 20 63 6f 6e 64 69 74  ubsequent condit
148f0 69 6f 6e 61 6c 2c 20 77 68 69 63 68 20 69 73 20  ional, which is 
14900 61 6c 77 61 79 73 20 74 72 75 65 2e 0a 20 20 20  always true..   
14910 20 20 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74     */.      zDat
14920 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20  a = pC->aRow;.  
14930 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
14940 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
14950 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  ;         /* Con
14960 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64  ditional skipped
14970 20 2a 2f 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f   */.      goto o
14980 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65  p_column_read_he
14990 61 64 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ader;.    }.  }.
149a0 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
149b0 61 74 20 6c 65 61 73 74 20 74 68 65 20 66 69 72  at least the fir
149c0 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20  st p2+1 entries 
149d0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 68 61  of the header ha
149e0 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72  ve been.  ** par
149f0 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e  sed and valid in
14a00 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20  formation is in 
14a10 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43  aOffset[] and pC
14a20 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a  ->aType[]..  */.
14a30 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61    if( pC->nHdrPa
14a40 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20  rsed<=p2 ){.    
14a50 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6d  /* If there is m
14a60 6f 72 65 20 68 65 61 64 65 72 20 61 76 61 69 6c  ore header avail
14a70 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67  able for parsing
14a80 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20   in the record, 
14a90 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78  try.    ** to ex
14aa0 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c  tract additional
14ab0 20 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75   fields up throu
14ac0 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66  gh the p2+1-th f
14ad0 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20  ield .    */.   
14ae0 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66   if( pC->iHdrOff
14af0 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29  set<aOffset[0] )
14b00 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20  {.      /* Make 
14b10 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74  sure zData point
14b20 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74  s to enough of t
14b30 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76  he record to cov
14b40 65 72 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a  er the header. *
14b50 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  /.      if( pC->
14b60 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20  aRow==0 ){.     
14b70 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c     memset(&sMem,
14b80 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29   0, sizeof(sMem)
14b90 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
14ba0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
14bb0 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70  omBtree(pC->uc.p
14bc0 43 75 72 73 6f 72 2c 20 30 2c 20 61 4f 66 66 73  Cursor, 0, aOffs
14bd0 65 74 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20  et[0], &sMem);. 
14be0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
14bf0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
14c00 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
14c10 6f 72 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74  or;.        zDat
14c20 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b  a = (u8*)sMem.z;
14c30 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
14c40 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43        zData = pC
14c50 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a  ->aRow;.      }.
14c60 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c    .      /* Fill
14c70 20 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d   in pC->aType[i]
14c80 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20   and aOffset[i] 
14c90 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74  values through t
14ca0 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20  he p2-th field. 
14cb0 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e  */.    op_column
14cc0 5f 72 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20  _read_header:.  
14cd0 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72      i = pC->nHdr
14ce0 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66  Parsed;.      of
14cf0 66 73 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74  fset64 = aOffset
14d00 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20  [i];.      zHdr 
14d10 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48  = zData + pC->iH
14d20 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20  drOffset;.      
14d30 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20  zEndHdr = zData 
14d40 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20  + aOffset[0];.  
14d50 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
14d60 69 66 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d  if( (t = zHdr[0]
14d70 29 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20  )<0x80 ){.      
14d80 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20      zHdr++;.    
14d90 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b        offset64 +
14da0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65  = sqlite3VdbeOne
14db0 42 79 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65  ByteSerialTypeLe
14dc0 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  n(t);.        }e
14dd0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a  lse{.          z
14de0 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65  Hdr += sqlite3Ge
14df0 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20  tVarint32(zHdr, 
14e00 26 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f  &t);.          o
14e10 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74  ffset64 += sqlit
14e20 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
14e30 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20  Len(t);.        
14e40 7d 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54  }.        pC->aT
14e50 79 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20  ype[i++] = t;.  
14e60 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
14e70 20 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74 36   = (u32)(offset6
14e80 34 20 26 20 30 78 66 66 66 66 66 66 66 66 29 3b  4 & 0xffffffff);
14e90 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69  .      }while( i
14ea0 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e  <=p2 && zHdr<zEn
14eb0 64 48 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f  dHdr );..      /
14ec0 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20  * The record is 
14ed0 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f  corrupt if any o
14ee0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
14ef0 61 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20  are true:.      
14f00 2a 2a 20 28 31 29 20 74 68 65 20 62 79 74 65 73  ** (1) the bytes
14f10 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 65   of the header e
14f20 78 74 65 6e 64 20 70 61 73 74 20 74 68 65 20 64  xtend past the d
14f30 65 63 6c 61 72 65 64 20 68 65 61 64 65 72 20 73  eclared header s
14f40 69 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29  ize.      ** (2)
14f50 20 74 68 65 20 65 6e 74 69 72 65 20 68 65 61 64   the entire head
14f60 65 72 20 77 61 73 20 75 73 65 64 20 62 75 74 20  er was used but 
14f70 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73  not all data was
14f80 20 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28   used.      ** (
14f90 33 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  3) the end of th
14fa0 65 20 64 61 74 61 20 65 78 74 65 6e 64 73 20 62  e data extends b
14fb0 65 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66  eyond the end of
14fc0 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20   the record..   
14fd0 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
14fe0 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26  (zHdr>=zEndHdr &
14ff0 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20  & (zHdr>zEndHdr 
15000 7c 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d  || offset64!=pC-
15010 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20  >payloadSize)). 
15020 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74        || (offset
15030 36 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64  64 > pC->payload
15040 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20  Size).      ){. 
15050 20 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61         if( pC->a
15060 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33  Row==0 ) sqlite3
15070 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
15080 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 72  sMem);.        r
15090 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
150a0 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20  PT_BKPT;.       
150b0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
150c0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
150d0 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64  }..      pC->nHd
150e0 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20  rParsed = i;.   
150f0 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65     pC->iHdrOffse
15100 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d  t = (u32)(zHdr -
15110 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69   zData);.      i
15120 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
15130 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
15140 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
15150 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
15160 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20  t = 0;.    }..  
15170 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72    /* If after tr
15180 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20  ying to extract 
15190 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  new entries from
151a0 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64   the header, nHd
151b0 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a  rParsed is.    *
151c0 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74  * still not up t
151d0 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73  o p2, that means
151e0 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64   that the record
151f0 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e 20   has fewer than 
15200 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e  p2.    ** column
15210 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c  s.  So the resul
15220 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72  t will be either
15230 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
15240 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20  ue or a NULL..  
15250 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d    */.    if( pC-
15260 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
15270 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
15280 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d  ->p4type==P4_MEM
15290 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
152a0 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
152b0 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70  wCopy(pDest, pOp
152c0 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53  ->p4.pMem, MEM_S
152d0 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65  tatic);.      }e
152e0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
152f0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
15300 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  ll(pDest);.     
15310 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70   }.      goto op
15320 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
15330 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
15340 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  t = pC->aType[p2
15350 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74  ];.  }..  /* Ext
15360 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  ract the content
15370 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68   for the p2+1-th
15380 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f   column.  Contro
15390 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20  l can only.  ** 
153a0 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
153b0 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c   if aOffset[p2],
153c0 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20   aOffset[p2+1], 
153d0 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  and pC->aType[p2
153e0 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76  ] are.  ** all v
153f0 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  alid..  */.  ass
15400 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72  ert( p2<pC->nHdr
15410 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65  Parsed );.  asse
15420 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
15430 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  K );.  assert( s
15440 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
15450 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65  emInvariants(pDe
15460 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62  st) );.  if( Vdb
15470 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73  eMemDynamic(pDes
15480 74 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  t) ){.    sqlite
15490 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
154a0 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61 73  pDest);.  }.  as
154b0 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79  sert( t==pC->aTy
154c0 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28 20  pe[p2] );.  if( 
154d0 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73  pC->szRow>=aOffs
154e0 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20  et[p2+1] ){.    
154f0 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63  /* This is the c
15500 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65  ommon case where
15510 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e   the desired con
15520 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65  tent fits on the
15530 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a   original.    **
15540 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74 68   page - where th
15550 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74  e content is not
15560 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20   on an overflow 
15570 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74  page */.    zDat
15580 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61  a = pC->aRow + a
15590 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20  Offset[p2];.    
155a0 69 66 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20  if( t<12 ){.    
155b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
155c0 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c  ialGet(zData, t,
155d0 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
155e0 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  se{.      /* If 
155f0 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  the column value
15600 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65   is a string, we
15610 20 6e 65 65 64 20 61 20 70 65 72 73 69 73 74 65   need a persiste
15620 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20  nt value, not.  
15630 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68      ** a MEM_Eph
15640 65 6d 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20  em value.  This 
15650 62 72 61 6e 63 68 20 69 73 20 61 20 66 61 73 74  branch is a fast
15660 20 73 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20   short-cut that 
15670 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20  is equivalent.  
15680 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e      ** to callin
15690 67 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  g sqlite3VdbeSer
156a0 69 61 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c  ialGet() and sql
156b0 69 74 65 33 56 64 62 65 44 65 65 70 68 65 6d 65  ite3VdbeDeepheme
156c0 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20  ralize()..      
156d0 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  */.      static 
156e0 63 6f 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b  const u16 aFlag[
156f0 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20  ] = { MEM_Blob, 
15700 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d  MEM_Str|MEM_Term
15710 20 7d 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   };.      pDest-
15720 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32  >n = len = (t-12
15730 29 2f 32 3b 0a 20 20 20 20 20 20 70 44 65 73 74  )/2;.      pDest
15740 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
15750 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44 65 73  ;.      if( pDes
15760 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65  t->szMalloc < le
15770 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70  n+2 ){.        p
15780 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  Dest->flags = ME
15790 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  M_Null;.        
157a0 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
157b0 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65  emGrow(pDest, le
157c0 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e  n+2, 0) ) goto n
157d0 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c  o_mem;.      }el
157e0 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73  se{.        pDes
157f0 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d  t->z = pDest->zM
15800 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20  alloc;.      }. 
15810 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73       memcpy(pDes
15820 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e  t->z, zData, len
15830 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  );.      pDest->
15840 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20  z[len] = 0;.    
15850 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31    pDest->z[len+1
15860 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65  ] = 0;.      pDe
15870 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61  st->flags = aFla
15880 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20  g[t&1];.    }.  
15890 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44 65 73 74  }else{.    pDest
158a0 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
158b0 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72  ;.    /* This br
158c0 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c  anch happens onl
158d0 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69  y when content i
158e0 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  s on overflow pa
158f0 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28  ges */.    if( (
15900 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
15910 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46  AG_LENGTHARG|OPF
15920 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21  LAG_TYPEOFARG))!
15930 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26 20  =0.          && 
15940 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29  ((t>=12 && (t&1)
15950 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35  ==0) || (pOp->p5
15960 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46   & OPFLAG_TYPEOF
15970 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c  ARG)!=0)).     |
15980 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33  | (len = sqlite3
15990 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
159a0 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a  n(t))==0.    ){.
159b0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74        /* Content
159c0 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66   is irrelevant f
159d0 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31  or.      **    1
159e0 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29 20 66  . the typeof() f
159f0 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a  unction,.      *
15a00 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67  *    2. the leng
15a10 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69  th(X) function i
15a20 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61  f X is a blob, a
15a30 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33  nd.      **    3
15a40 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  . if the content
15a50 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e   length is zero.
15a60 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20  .      ** So we 
15a70 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73  might as well us
15a80 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  e bogus content 
15a90 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61 64  rather than read
15aa0 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ing.      ** con
15ab0 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20  tent from disk. 
15ac0 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  */.      static 
15ad0 75 38 20 61 5a 65 72 6f 5b 38 5d 3b 20 20 2f 2a  u8 aZero[8];  /*
15ae0 20 54 68 69 73 20 69 73 20 74 68 65 20 62 6f 67   This is the bog
15af0 75 73 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  us content */.  
15b00 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
15b10 65 72 69 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20  erialGet(aZero, 
15b20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  t, pDest);.    }
15b30 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
15b40 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
15b50 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75 63 2e  romBtree(pC->uc.
15b60 70 43 75 72 73 6f 72 2c 20 61 4f 66 66 73 65 74  pCursor, aOffset
15b70 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 44 65 73 74  [p2], len, pDest
15b80 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
15b90 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
15ba0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
15bb0 72 72 6f 72 3b 0a 20 20 20 20 20 20 73 71 6c 69  rror;.      sqli
15bc0 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
15bd0 28 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73  ((const u8*)pDes
15be0 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b  t->z, t, pDest);
15bf0 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  .      pDest->fl
15c00 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65  ags &= ~MEM_Ephe
15c10 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70  m;.    }.  }..op
15c20 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55  _column_out:.  U
15c30 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
15c40 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47  ZE(pDest);.  REG
15c50 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
15c60 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62  >p3, pDest);.  b
15c70 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
15c80 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20  de: Affinity P1 
15c90 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
15ca0 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28  opsis: affinity(
15cb0 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  r[P1@P2]).**.** 
15cc0 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73  Apply affinities
15cd0 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50   to a range of P
15ce0 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  2 registers star
15cf0 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a  ting with P1..**
15d00 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69  .** P4 is a stri
15d10 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
15d20 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54  aracters long. T
15d30 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72  he nth character
15d40 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
15d50 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
15d60 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
15d70 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
15d80 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a  sed for the nth.
15d90 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  ** memory cell i
15da0 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a  n the range..*/.
15db0 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79  case OP_Affinity
15dc0 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  : {.  const char
15dd0 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f   *zAffinity;   /
15de0 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
15df0 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
15e00 20 20 63 68 61 72 20 63 41 66 66 3b 20 20 20 20    char cAff;    
15e10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
15e20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
15e30 20 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a   of affinity */.
15e40 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
15e50 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
15e60 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30  rt( zAffinity!=0
15e70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41   );.  assert( zA
15e80 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d  ffinity[pOp->p2]
15e90 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  ==0 );.  pIn1 = 
15ea0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
15eb0 20 20 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d    while( (cAff =
15ec0 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29   *(zAffinity++))
15ed0 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
15ee0 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61  t( pIn1 <= &p->a
15ef0 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  Mem[(p->nMem+1 -
15f00 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b   p->nCursor)] );
15f10 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
15f20 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
15f30 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
15f40 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65  ty(pIn1, cAff, e
15f50 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49  ncoding);.    pI
15f60 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
15f70 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15f80 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
15f90 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
15fa0 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72  opsis: r[P3]=mkr
15fb0 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ec(r[P1@P2]).**.
15fc0 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
15fd0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
15fe0 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
15ff0 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
16000 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
16010 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
16020 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
16030 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
16040 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
16050 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
16060 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
16070 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
16080 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
16090 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
160a0 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
160b0 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72  g.  The nth char
160c0 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
160d0 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
160e0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
160f0 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
16100 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
16110 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66   nth.** field of
16120 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
16130 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
16140 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
16150 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
16160 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
16170 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
16180 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
16190 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
161a0 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
161b0 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
161c0 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
161d0 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a  finity BLOB..*/.
161e0 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
161f0 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
16200 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
16210 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
16220 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
16230 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
16240 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
16250 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
16260 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
16270 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
16280 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16290 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
162a0 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
162b0 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
162c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
162d0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
162e0 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
162f0 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
16300 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
16310 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
16320 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
16330 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20   i64 nZero;     
16340 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16350 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
16360 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
16370 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
16380 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
16390 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
163a0 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
163b0 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
163c0 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
163d0 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
163e0 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
163f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
16400 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
16410 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
16420 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
16430 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
16440 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
16450 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
16460 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
16470 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16480 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
16490 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
164a0 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
164b0 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
164c0 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
164d0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
164e0 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
164f0 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
16500 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
16510 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
16520 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
16530 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
16540 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
16550 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
16560 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
16570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
16580 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
16590 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
165a0 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20  t */.  u32 len; 
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
165c0 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
165d0 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
165e0 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
165f0 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
16600 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
16610 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
16620 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
16630 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
16640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16650 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16660 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16670 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
16680 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
16690 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
166a0 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
166b0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
166c0 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
166d0 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
166e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16700 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16710 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
16720 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
16730 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
16740 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
16750 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
16760 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
16770 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
16780 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
16790 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
167a0 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
167b0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
167c0 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
167d0 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
167e0 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
167f0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
16800 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
16810 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
16820 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
16830 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
16840 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
16850 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
16860 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
16870 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
16880 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
16890 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
168a0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
168b0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
168c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
168d0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
168e0 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
168f0 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
16900 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
16910 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
16920 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
16930 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
16940 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
16950 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
16960 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
16970 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
16980 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
16990 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ield<=(p->nMem+1
169a0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
169b0 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
169c0 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
169d0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
169e0 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
169f0 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
16a00 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
16a10 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
16a20 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
16a30 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
16a40 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
16a50 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
16a60 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
16a70 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
16a80 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
16a90 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
16aa0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
16ab0 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
16ac0 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65   Apply the reque
16ad0 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f  sted affinity to
16ae0 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f   all inputs.  */
16af0 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
16b00 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66  0<=pLast );.  if
16b10 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20  ( zAffinity ){. 
16b20 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30     pRec = pData0
16b30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20  ;.    do{.      
16b40 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52  applyAffinity(pR
16b50 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74  ec++, *(zAffinit
16b60 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  y++), encoding);
16b70 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a  .      assert( z
16b80 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c  Affinity[0]==0 |
16b90 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b  | pRec<=pLast );
16ba0 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66  .    }while( zAf
16bb0 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d  finity[0] );.  }
16bc0 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f  ..  /* Loop thro
16bd0 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73  ugh the elements
16be0 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20   that will make 
16bf0 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  up the record to
16c00 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74   figure.  ** out
16c10 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20   how much space 
16c20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
16c30 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a  the new record..
16c40 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c    */.  pRec = pL
16c50 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  ast;.  do{.    a
16c60 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
16c70 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 70  d(pRec) );.    p
16c80 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72  Rec->uTemp = ser
16c90 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
16ca0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
16cb0 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
16cc0 61 74 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69  at, &len);.    i
16cd0 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
16ce0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
16cf0 20 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a     if( nData ){.
16d00 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
16d10 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
16d20 42 6c 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74  Blob(pRec) ) got
16d30 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20  o no_mem;.      
16d40 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e  }else{.        n
16d50 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e  Zero += pRec->u.
16d60 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c  nZero;.        l
16d70 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  en -= pRec->u.nZ
16d80 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ero;.      }.   
16d90 20 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20   }.    nData += 
16da0 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73  len;.    testcas
16db0 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  e( serial_type==
16dc0 31 32 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63  127 );.    testc
16dd0 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65  ase( serial_type
16de0 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64  ==128 );.    nHd
16df0 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65  r += serial_type
16e00 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69  <=127 ? 1 : sqli
16e10 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72  te3VarintLen(ser
16e20 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69  ial_type);.    i
16e30 66 28 20 70 52 65 63 3d 3d 70 44 61 74 61 30 20  f( pRec==pData0 
16e40 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 52 65  ) break;.    pRe
16e50 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29  c--;.  }while(1)
16e60 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  ;..  /* EVIDENCE
16e70 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36  -OF: R-22564-116
16e80 34 37 20 54 68 65 20 68 65 61 64 65 72 20 62 65  47 The header be
16e90 67 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67  gins with a sing
16ea0 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77  le varint.  ** w
16eb0 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20  hich determines 
16ec0 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
16ed0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
16ee0 20 68 65 61 64 65 72 2e 20 54 68 65 20 76 61 72   header. The var
16ef0 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69  int.  ** value i
16f00 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
16f10 65 20 68 65 61 64 65 72 20 69 6e 20 62 79 74 65  e header in byte
16f20 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  s including the 
16f30 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a  size varint.  **
16f40 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65   itself. */.  te
16f50 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32  stcase( nHdr==12
16f60 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  6 );.  testcase(
16f70 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20   nHdr==127 );.  
16f80 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b  if( nHdr<=126 ){
16f90 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d  .    /* The comm
16fa0 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e  on case */.    n
16fb0 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73  Hdr += 1;.  }els
16fc0 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63  e{.    /* Rare c
16fd0 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20  ase of a really 
16fe0 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a  large header */.
16ff0 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71      nVarint = sq
17000 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
17010 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  Hdr);.    nHdr +
17020 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69  = nVarint;.    i
17030 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74  f( nVarint<sqlit
17040 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
17050 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a  ) ) nHdr++;.  }.
17060 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e    nByte = nHdr+n
17070 44 61 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74  Data;.  if( nByt
17080 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d  e+nZero>db->aLim
17090 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
170a0 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
170b0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
170c0 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
170d0 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
170e0 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65  ster has a buffe
170f0 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
17100 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68  o store .  ** th
17110 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68  e new record. Th
17120 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
17130 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e  r (pOp->p3) is n
17140 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20  ot allowed to.  
17150 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ** be one of the
17160 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
17170 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f   (because the fo
17180 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a  llowing call to.
17190 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
171a0 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
171b0 65 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  e() could clobbe
171c0 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
171d0 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
171e0 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
171f0 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e  e3VdbeMemClearAn
17200 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69  dResize(pOut, (i
17210 6e 74 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20  nt)nByte) ){.   
17220 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
17230 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d  }.  zNewRecord =
17240 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a   (u8 *)pOut->z;.
17250 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20  .  /* Write the 
17260 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20  record */.  i = 
17270 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77  putVarint32(zNew
17280 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20  Record, nHdr);. 
17290 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73   j = nHdr;.  ass
172a0 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61  ert( pData0<=pLa
172b0 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70  st );.  pRec = p
172c0 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20  Data0;.  do{.   
172d0 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70   serial_type = p
172e0 52 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20  Rec->uTemp;.    
172f0 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
17300 52 2d 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f  R-06529-47362 Fo
17310 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65  llowing the size
17320 20 76 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20   varint are one 
17330 6f 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61  or more.    ** a
17340 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74  dditional varint
17350 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d  s, one per colum
17360 6e 2e 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70  n. */.    i += p
17370 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77  utVarint32(&zNew
17380 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61  Record[i], seria
17390 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20 20  l_type);        
173a0 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79      /* serial ty
173b0 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49  pe */.    /* EVI
173c0 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33  DENCE-OF: R-6453
173d0 36 2d 35 31 37 32 38 20 54 68 65 20 76 61 6c 75  6-51728 The valu
173e0 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  es for each colu
173f0 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  mn in the record
17400 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74  .    ** immediat
17410 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68  ely follow the h
17420 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20  eader. */.    j 
17430 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
17440 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63  rialPut(&zNewRec
17450 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65  ord[j], pRec, se
17460 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63  rial_type); /* c
17470 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69  ontent */.  }whi
17480 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c  le( (++pRec)<=pL
17490 61 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ast );.  assert(
174a0 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73   i==nHdr );.  as
174b0 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29  sert( j==nByte )
174c0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
174d0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
174e0 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
174f0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
17500 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
17510 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
17520 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b  lags = MEM_Blob;
17530 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a  .  if( nZero ){.
17540 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72      pOut->u.nZer
17550 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  o = nZero;.    p
17560 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
17570 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f  M_Zero;.  }.  pO
17580 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
17590 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
175a0 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
175b0 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ver converted to
175c0 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53   text */.  REGIS
175d0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
175e0 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
175f0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
17600 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
17610 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
17620 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
17630 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
17640 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a  2]=count().**.**
17650 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
17660 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
17670 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
17680 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
17690 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
176a0 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
176b0 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
176c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
176d0 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
176e0 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
176f0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
17700 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
17710 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
17720 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  sr;..  assert( p
17730 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
17740 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
17750 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
17760 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  Crsr = p->apCsr[
17770 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75  pOp->p1]->uc.pCu
17780 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
17790 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72  pCrsr );.  nEntr
177a0 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  y = 0;  /* Not n
177b0 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
177c0 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
177d0 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
177e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f  = sqlite3BtreeCo
177f0 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74  unt(pCrsr, &nEnt
17800 72 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ry);.  if( rc ) 
17810 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
17820 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20  o_error;.  pOut 
17830 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
17840 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
17850 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a  ->u.i = nEntry;.
17860 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
17870 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61  f../* Opcode: Sa
17880 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50  vepoint P1 * * P
17890 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20  4 *.**.** Open, 
178a0 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62  release or rollb
178b0 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e  ack the savepoin
178c0 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d  t named by param
178d0 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69  eter P4, dependi
178e0 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c  ng.** on the val
178f0 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65  ue of P1. To ope
17900 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  n a new savepoin
17910 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c  t, P1==0. To rel
17920 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e  ease (commit) an
17930 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76  .** existing sav
17940 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f  epoint, P1==1, o
17950 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  r to rollback an
17960 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
17970 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61  int P1==2..*/.ca
17980 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a  se OP_Savepoint:
17990 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20   {.  int p1;    
179a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179b0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
179c0 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20   P1 operand */. 
179d0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179f0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65   /* Name of save
17a00 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  point */.  int n
17a10 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e  Name;.  Savepoin
17a20 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70  t *pNew;.  Savep
17a30 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
17a40 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
17a50 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65  Tmp;.  int iSave
17a60 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b  point;.  int ii;
17a70 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
17a80 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d  ;.  zName = pOp-
17a90 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73  >p4.z;..  /* Ass
17aa0 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20  ert that the p1 
17ab0 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c  parameter is val
17ac0 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66  id. Also that if
17ad0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
17ae0 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  n.  ** transacti
17af0 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63  on, then there c
17b00 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76  annot be any sav
17b10 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20  epoints. .  */. 
17b20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
17b30 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62  vepoint==0 || db
17b40 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
17b50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d  );.  assert( p1=
17b60 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
17b70 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
17b80 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56  RELEASE||p1==SAV
17b90 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
17ba0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
17bb0 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64  >pSavepoint || d
17bc0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
17bd0 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a  Savepoint==0 );.
17be0 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
17bf0 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
17c00 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
17c10 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
17c20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
17c30 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20  INT_BEGIN ){.   
17c40 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
17c50 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f  ite>0 ){.      /
17c60 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  * A new savepoin
17c70 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61  t cannot be crea
17c80 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65  ted if there are
17c90 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20   active write . 
17ca0 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e       ** statemen
17cb0 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65  ts (i.e. open re
17cc0 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65  ad/write increme
17cd0 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65  ntal blob handle
17ce0 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  s)..      */.   
17cf0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
17d00 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f  ror(p, "cannot o
17d10 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  pen savepoint - 
17d20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
17d30 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
17d40 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
17d50 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
17d60 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73  .      nName = s
17d70 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
17d80 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20  Name);..#ifndef 
17d90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
17da0 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f  UALTABLE.      /
17db0 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f  * This call is O
17dc0 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73  k even if this s
17dd0 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75  avepoint is actu
17de0 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69  ally a transacti
17df0 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  on.      ** save
17e00 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65  point (and there
17e10 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20  fore should not 
17e20 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e  prompt xSavepoin
17e30 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  t()) callbacks..
17e40 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73        ** If this
17e50 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
17e60 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  n savepoint bein
17e70 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20  g opened, it is 
17e80 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20  guaranteed.     
17e90 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d   ** that the db-
17ea0 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79  >aVTrans[] array
17eb0 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20   is empty.  */. 
17ec0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
17ed0 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
17ee0 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30  | db->nVTrans==0
17ef0 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
17f00 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
17f10 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
17f20 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20  T_BEGIN,.       
17f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f40 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74           db->nSt
17f50 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76  atement+db->nSav
17f60 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69  epoint);.      i
17f70 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17f80 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
17f90 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
17fa0 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65  if..      /* Cre
17fb0 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f  ate a new savepo
17fc0 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a  int structure. *
17fd0 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73  /.      pNew = s
17fe0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
17ff0 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53  wNN(db, sizeof(S
18000 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b  avepoint)+nName+
18010 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e  1);.      if( pN
18020 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e  ew ){.        pN
18030 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61  ew->zName = (cha
18040 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20  r *)&pNew[1];.  
18050 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65        memcpy(pNe
18060 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c  w->zName, zName,
18070 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a   nName+1);.    .
18080 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
18090 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74  ere is no open t
180a0 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
180b0 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20   mark this as a 
180c0 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20  special.        
180d0 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20  ** "transaction 
180e0 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20  savepoint". */. 
180f0 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61         if( db->a
18100 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
18110 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
18120 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
18130 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
18140 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
18150 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
18160 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62  se{.          db
18170 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a  ->nSavepoint++;.
18180 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
18190 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
181a0 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
181b0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
181c0 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
181d0 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
181e0 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
181f0 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
18200 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
18210 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
18220 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
18230 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
18240 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70  dCons;.        p
18250 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  New->nDeferredIm
18260 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
18270 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
18280 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
18290 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f  lse{.    iSavepo
182a0 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a  int = 0;..    /*
182b0 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20   Find the named 
182c0 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68  savepoint. If th
182d0 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73  ere is no such s
182e0 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61  avepoint, then a
182f0 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f  n.    ** an erro
18300 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f  r is returned to
18310 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20   the user.  */. 
18320 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53     for(.      pS
18330 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70  avepoint = db->p
18340 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20  Savepoint; .    
18350 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20    pSavepoint && 
18360 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70  sqlite3StrICmp(p
18370 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65  Savepoint->zName
18380 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
18390 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
183a0 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20  vepoint->pNext. 
183b0 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76     ){.      iSav
183c0 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  epoint++;.    }.
183d0 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f      if( !pSavepo
183e0 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
183f0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
18400 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f   "no such savepo
18410 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29  int: %s", zName)
18420 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
18430 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
18440 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64  else if( db->nVd
18450 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d  beWrite>0 && p1=
18460 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
18470 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  SE ){.      /* I
18480 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
18490 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  e to release (co
184a0 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e  mmit) a savepoin
184b0 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a  t if there are .
184c0 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20        ** active 
184d0 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  write statements
184e0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
184f0 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
18500 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c  r(p, "cannot rel
18510 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d  ease savepoint -
18520 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
18530 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51               "SQ
18540 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
18550 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
18560 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
18570 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a  SY;.    }else{..
18580 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69        /* Determi
18590 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
185a0 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  t this is a tran
185b0 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
185c0 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20  t. If so,.      
185d0 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61  ** and this is a
185e0 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
185f0 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65  , then the curre
18600 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a  nt transaction .
18610 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d        ** is comm
18620 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f  itted. .      */
18630 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61  .      int isTra
18640 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65  nsaction = pSave
18650 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20  point->pNext==0 
18660 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  && db->isTransac
18670 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20  tionSavepoint;. 
18680 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73       if( isTrans
18690 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41  action && p1==SA
186a0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
186b0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
186c0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
186d0 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
186e0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
186f0 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
18700 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
18710 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61   }.        db->a
18720 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
18730 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
18740 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
18750 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
18760 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
18770 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
18780 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
18790 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
187a0 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20            p->rc 
187b0 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
187c0 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  SY;.          go
187d0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
187e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
187f0 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
18800 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30  ionSavepoint = 0
18810 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70  ;.        rc = p
18820 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ->rc;.      }els
18830 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  e{.        int i
18840 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20  sSchemaChange;. 
18850 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e         iSavepoin
18860 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
18870 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20  nt - iSavepoint 
18880 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  - 1;.        if(
18890 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
188a0 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20  OLLBACK ){.     
188b0 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61       isSchemaCha
188c0 6e 67 65 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73  nge = (db->flags
188d0 20 26 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e   & SQLITE_Intern
188e0 43 68 61 6e 67 65 73 29 21 3d 30 3b 0a 20 20 20  Changes)!=0;.   
188f0 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b         for(ii=0;
18900 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
18910 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
18920 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
18930 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28  eTripAllCursors(
18940 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
18950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18970 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 41          SQLITE_A
18980 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20  BORT_ROLLBACK,. 
18990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189b0 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
189c0 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20  ange==0);.      
189d0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
189e0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
189f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
18a00 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  r;.          }. 
18a10 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
18a20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
18a30 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20  Change = 0;.    
18a40 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f      }.        fo
18a50 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
18a60 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
18a70 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
18a80 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28  3BtreeSavepoint(
18a90 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
18aa0 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
18ab0 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
18ac0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
18ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74  .            got
18ae0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18af0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
18b00 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
18b10 20 20 20 20 69 66 28 20 69 73 53 63 68 65 6d 61      if( isSchema
18b20 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20 20 20  Change ){.      
18b30 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
18b40 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
18b50 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20  nts(db);.       
18b60 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41     sqlite3ResetA
18b70 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
18b80 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20  ction(db);.     
18b90 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d       db->flags =
18ba0 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51   (db->flags | SQ
18bb0 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
18bc0 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  es);.        }. 
18bd0 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
18be0 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  /* Regardless of
18bf0 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
18c00 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f   a RELEASE or RO
18c10 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20  LLBACK, destroy 
18c20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61  all .      ** sa
18c30 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20  vepoints nested 
18c40 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61  inside of the sa
18c50 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
18c60 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20  erated on. */.  
18c70 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70      while( db->p
18c80 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65  Savepoint!=pSave
18c90 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  point ){.       
18ca0 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76   pTmp = db->pSav
18cb0 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
18cc0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
18cd0 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20   pTmp->pNext;.  
18ce0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
18cf0 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20  ree(db, pTmp);. 
18d00 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
18d10 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d  point--;.      }
18d20 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74  ..      /* If it
18d30 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74   is a RELEASE, t
18d40 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20  hen destroy the 
18d50 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
18d60 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20  operated on .   
18d70 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74     ** too. If it
18d80 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54   is a ROLLBACK T
18d90 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20  O, then set the 
18da0 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  number of deferr
18db0 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ed .      ** con
18dc0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
18dd0 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  ns present in th
18de0 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
18df0 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20  e value stored. 
18e00 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65       ** when the
18e10 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63   savepoint was c
18e20 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20  reated.  */.    
18e30 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
18e40 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
18e50 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
18e60 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70  Savepoint==db->p
18e70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20  Savepoint );.   
18e80 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
18e90 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
18ea0 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
18eb0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
18ec0 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b, pSavepoint);.
18ed0 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73 54          if( !isT
18ee0 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ransaction ){.  
18ef0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
18f00 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
18f10 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b    }.      }else{
18f20 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65  .        db->nDe
18f30 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61  ferredCons = pSa
18f40 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
18f50 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20  edCons;.        
18f60 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
18f70 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
18f80 74 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  t->nDeferredImmC
18f90 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ons;.      }..  
18fa0 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
18fb0 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41  action || p1==SA
18fc0 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
18fd0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
18fe0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
18ff0 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53  point(db, p1, iS
19000 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
19010 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
19020 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
19030 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
19040 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
19050 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
19060 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
19070 72 72 6f 72 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a  rror;..  break;.
19080 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75  }../* Opcode: Au
19090 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a  toCommit P1 P2 *
190a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74   * *.**.** Set t
190b0 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f  he database auto
190c0 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20  -commit flag to 
190d0 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20  P1 (1 or 0). If 
190e0 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c  P2 is true, roll
190f0 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72  .** back any cur
19100 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74  rently active bt
19110 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ree transactions
19120 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61  . If there are a
19130 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73  ny active.** VMs
19140 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69   (apart from thi
19150 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52  s one), then a R
19160 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20  OLLBACK fails.  
19170 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69  A COMMIT fails i
19180 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61  f.** there are a
19190 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d  ctive writing VM
191a0 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20  s or active VMs 
191b0 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20  that use shared 
191c0 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  cache..**.** Thi
191d0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61  s instruction ca
191e0 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68  uses the VM to h
191f0 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
19200 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20  AutoCommit: {.  
19210 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43  int desiredAutoC
19220 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f  ommit;.  int iRo
19230 6c 6c 62 61 63 6b 3b 0a 0a 20 20 64 65 73 69 72  llback;..  desir
19240 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70  edAutoCommit = p
19250 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62  Op->p1;.  iRollb
19260 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ack = pOp->p2;. 
19270 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
19280 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
19290 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
192a0 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
192b0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
192c0 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c  mmit==1 || iRoll
192d0 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73  back==0 );.  ass
192e0 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41 63  ert( db->nVdbeAc
192f0 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74  tive>0 );  /* At
19300 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20   least this one 
19310 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a  VM is active */.
19320 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
19330 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28  Reader );..  if(
19340 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
19350 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  it!=db->autoComm
19360 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52  it ){.    if( iR
19370 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20  ollback ){.     
19380 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
19390 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b  AutoCommit==1 );
193a0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
193b0 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51  llbackAll(db, SQ
193c0 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
193d0 41 43 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  ACK);.      db->
193e0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
193f0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65      }else if( de
19400 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
19410 26 26 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  && db->nVdbeWrit
19420 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  e>0 ){.      /* 
19430 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
19440 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ion implements a
19450 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65   COMMIT and othe
19460 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e  r VMs are writin
19470 67 0a 20 20 20 20 20 20 2a 2a 20 72 65 74 75 72  g.      ** retur
19480 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
19490 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f  ating that the o
194a0 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
194b0 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
194c0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
194d0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
194e0 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74  , "cannot commit
194f0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22   transaction - "
19500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19510 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20             "SQL 
19520 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
19530 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
19540 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
19550 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
19560 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
19570 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28  .    }else if( (
19580 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
19590 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
195a0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
195b0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
195c0 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  urn;.    }else{.
195d0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
195e0 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69 72  mmit = (u8)desir
195f0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
19600 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69    }.    if( sqli
19610 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
19620 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
19630 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
19640 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
19650 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
19660 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73  mit = (u8)(1-des
19670 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b  iredAutoCommit);
19680 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  .      p->rc = r
19690 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
196a0 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
196b0 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20  _return;.    }. 
196c0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
196d0 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a  Statement==0 );.
196e0 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65      sqlite3Close
196f0 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a  Savepoints(db);.
19700 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53      if( p->rc==S
19710 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
19720 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f    rc = SQLITE_DO
19730 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  NE;.    }else{. 
19740 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
19750 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
19760 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
19770 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rn;.  }else{.   
19780 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
19790 72 28 70 2c 0a 20 20 20 20 20 20 20 20 28 21 64  r(p,.        (!d
197a0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
197b0 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20  )?"cannot start 
197c0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69  a transaction wi
197d0 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
197e0 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69  on":(.        (i
197f0 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f  Rollback)?"canno
19800 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20  t rollback - no 
19810 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
19820 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20  ctive":.        
19830 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e             "cann
19840 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74  ot commit - no t
19850 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
19860 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20  tive"));.       
19870 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49    .    rc = SQLI
19880 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 67 6f  TE_ERROR;.    go
19890 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
198a0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65  error;.  }.  bre
198b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
198c0 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31  : Transaction P1
198d0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
198e0 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73  ** Begin a trans
198f0 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61  action on databa
19900 73 65 20 50 31 20 69 66 20 61 20 74 72 61 6e 73  se P1 if a trans
19910 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c  action is not al
19920 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e  ready.** active.
19930 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e  .** If P2 is non
19940 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72  -zero, then a wr
19950 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
19960 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72 20 69  is started, or i
19970 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61  f a .** read-tra
19980 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c 72 65  nsaction is alre
19990 61 64 79 20 61 63 74 69 76 65 2c 20 69 74 20 69  ady active, it i
199a0 73 20 75 70 67 72 61 64 65 64 20 74 6f 20 61 20  s upgraded to a 
199b0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
199c0 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a  n..** If P2 is z
199d0 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64  ero, then a read
199e0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
199f0 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  started..**.** P
19a00 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
19a10 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
19a20 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
19a30 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
19a40 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
19a50 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
19a60 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
19a70 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
19a80 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
19a90 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
19aa0 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
19ab0 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
19ac0 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
19ad0 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
19ae0 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d  *.** If a write-
19af0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
19b00 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56  tarted and the V
19b10 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72  dbe.usesStmtJour
19b20 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74  nal flag is.** t
19b30 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69  rue (this flag i
19b40 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62  s set if the Vdb
19b50 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72  e may modify mor
19b60 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61  e than one row a
19b70 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20  nd may.** throw 
19b80 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
19b90 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  on), a statement
19ba0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
19bb0 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e   also be opened.
19bc0 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69  .** More specifi
19bd0 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65  cally, a stateme
19be0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
19bf0 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65  s opened iff the
19c00 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
19c10 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
19c20 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f  ntly not in auto
19c30 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20  commit mode, or 
19c40 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68  if there are oth
19c50 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61  er.** active sta
19c60 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65  tements. A state
19c70 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
19c80 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e   allows the chan
19c90 67 65 73 20 6d 61 64 65 20 62 79 20 74 68 69 73  ges made by this
19ca0 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72  .** VDBE to be r
19cb0 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72  olled back after
19cc0 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75   an error withou
19cd0 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c  t having to roll
19ce0 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74   back the.** ent
19cf0 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ire transaction.
19d00 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20   If no error is 
19d10 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65  encountered, the
19d20 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
19d30 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61  action.** will a
19d40 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d  utomatically com
19d50 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42  mit when the VDB
19d60 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  E halts..**.** I
19d70 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74 68 69  f P5!=0 then thi
19d80 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63 68  s opcode also ch
19d90 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d 61 20  ecks the schema 
19da0 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74 20 50  cookie against P
19db0 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 63 68  3.** and the sch
19dc0 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  ema generation c
19dd0 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74 20 50  ounter against P
19de0 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65  4..** The cookie
19df0 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c   changes its val
19e00 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ue whenever the 
19e10 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
19e20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73  changes..** This
19e30 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73   operation is us
19e40 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65  ed to detect whe
19e50 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69  n that the cooki
19e60 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a  e has changed.**
19e70 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75   and that the cu
19e80 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65  rrent process ne
19e90 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68  eds to reread th
19ea0 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20 74 68  e schema.  If th
19eb0 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b  e schema.** cook
19ec0 69 65 20 69 6e 20 50 33 20 64 69 66 66 65 72 73  ie in P3 differs
19ed0 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65 6d 61   from the schema
19ee0 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20 64   cookie in the d
19ef0 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20 6f  atabase header o
19f00 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63 68 65  r.** if the sche
19f10 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ma generation co
19f20 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69 66 66  unter in P4 diff
19f30 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ers from the cur
19f40 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69  rent.** generati
19f50 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e  on counter, then
19f60 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d   an SQLITE_SCHEM
19f70 41 20 65 72 72 6f 72 20 69 73 20 72 61 69 73 65  A error is raise
19f80 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a  d and execution.
19f90 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65 20 73  ** halts.  The s
19fa0 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77 72  qlite3_step() wr
19fb0 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d  apper function m
19fc0 69 67 68 74 20 74 68 65 6e 20 72 65 70 72 65 70  ight then reprep
19fd0 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61 74 65  are the.** state
19fe0 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e 20 69  ment and rerun i
19ff0 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
1a000 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ning..*/.case OP
1a010 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a  _Transaction: {.
1a020 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20    Btree *pBt;.  
1a030 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
1a040 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72 74   iGen;..  assert
1a050 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1a060 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
1a070 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f  eadOnly==0 || pO
1a080 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73  p->p2==0 );.  as
1a090 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1a0a0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
1a0b0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1a0c0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1a0d0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
1a0e0 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  1) );.  if( pOp-
1a0f0 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61 67  >p2 && (db->flag
1a100 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72 79  s & SQLITE_Query
1a110 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20 20  Only)!=0 ){.    
1a120 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41 44  rc = SQLITE_READ
1a130 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61  ONLY;.    goto a
1a140 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1a150 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20 64  r;.  }.  pBt = d
1a160 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
1a170 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20  pBt;..  if( pBt 
1a180 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
1a190 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
1a1a0 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29  ns(pBt, pOp->p2)
1a1b0 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
1a1c0 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f  rc==SQLITE_BUSY_
1a1d0 53 4e 41 50 53 48 4f 54 20 29 3b 0a 20 20 20 20  SNAPSHOT );.    
1a1e0 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
1a1f0 4c 49 54 45 5f 42 55 53 59 5f 52 45 43 4f 56 45  LITE_BUSY_RECOVE
1a200 52 59 20 29 3b 0a 20 20 20 20 69 66 28 20 72 63  RY );.    if( rc
1a210 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1a220 20 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66       if( (rc&0xf
1a230 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  f)==SQLITE_BUSY 
1a240 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63  ){.        p->pc
1a250 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
1a260 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e  Op);.        p->
1a270 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 20 20 20  rc = rc;.       
1a280 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
1a290 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  n;.      }.     
1a2a0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a2b0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1a2c0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
1a2d0 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
1a2e0 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
1a2f0 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
1a300 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  =0 || db->nVdbeR
1a310 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20  ead>1) .    ){. 
1a320 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
1a330 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
1a340 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20  ns(pBt) );.     
1a350 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65   if( p->iStateme
1a360 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
1a370 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
1a380 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62  atement>=0 && db
1a390 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20  ->nSavepoint>=0 
1a3a0 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
1a3b0 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20  Statement++; .  
1a3c0 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d        p->iStatem
1a3d0 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  ent = db->nSavep
1a3e0 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74  oint + db->nStat
1a3f0 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a  ement;.      }..
1a400 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1a410 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
1a420 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
1a430 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  GIN, p->iStateme
1a440 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28  nt-1);.      if(
1a450 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1a460 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
1a470 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
1a480 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74  Stmt(pBt, p->iSt
1a490 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20  atement);.      
1a4a0 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72  }..      /* Stor
1a4b0 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  e the current va
1a4c0 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
1a4d0 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65  ase handles defe
1a4e0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a  rred constraint.
1a4f0 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72        ** counter
1a500 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  . If the stateme
1a510 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e  nt transaction n
1a520 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
1a530 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a  d back,.      **
1a540 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
1a550 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73  is counter needs
1a560 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20   to be restored 
1a570 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  too.  */.      p
1a580 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d  ->nStmtDefCons =
1a590 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
1a5a0 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74  ns;.      p->nSt
1a5b0 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64  mtDefImmCons = d
1a5c0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
1a5d0 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ons;.    }..    
1a5e0 2f 2a 20 47 61 74 68 65 72 20 74 68 65 20 73 63  /* Gather the sc
1a5f0 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
1a600 62 65 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67  ber for checking
1a610 3a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45  :.    ** IMPLEME
1a620 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 33  NTATION-OF: R-03
1a630 31 38 39 2d 35 31 31 33 35 20 41 73 20 65 61 63  189-51135 As eac
1a640 68 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  h SQL statement 
1a650 72 75 6e 73 2c 20 74 68 65 20 73 63 68 65 6d 61  runs, the schema
1a660 0a 20 20 20 20 2a 2a 20 76 65 72 73 69 6f 6e 20  .    ** version 
1a670 69 73 20 63 68 65 63 6b 65 64 20 74 6f 20 65 6e  is checked to en
1a680 73 75 72 65 20 74 68 61 74 20 74 68 65 20 73 63  sure that the sc
1a690 68 65 6d 61 20 68 61 73 20 6e 6f 74 20 63 68 61  hema has not cha
1a6a0 6e 67 65 64 20 73 69 6e 63 65 20 74 68 65 0a 20  nged since the. 
1a6b0 20 20 20 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d     ** SQL statem
1a6c0 65 6e 74 20 77 61 73 20 70 72 65 70 61 72 65 64  ent was prepared
1a6d0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c  ..    */.    sql
1a6e0 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
1a6f0 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45  (pBt, BTREE_SCHE
1a700 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32  MA_VERSION, (u32
1a710 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20   *)&iMeta);.    
1a720 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70  iGen = db->aDb[p
1a730 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d  Op->p1].pSchema-
1a740 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20  >iGeneration;.  
1a750 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20  }else{.    iGen 
1a760 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d  = iMeta = 0;.  }
1a770 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a780 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  p5==0 || pOp->p4
1a790 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1a7a0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
1a7b0 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e  && (iMeta!=pOp->
1a7c0 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d  p3 || iGen!=pOp-
1a7d0 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20 20 73 71  >p4.i) ){.    sq
1a7e0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
1a7f0 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  p->zErrMsg);.   
1a800 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   p->zErrMsg = sq
1a810 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62  lite3DbStrDup(db
1a820 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65  , "database sche
1a830 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 29  ma has changed")
1a840 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ;.    /* If the 
1a850 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72  schema-cookie fr
1a860 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
1a870 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65  file matches the
1a880 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20   cookie .    ** 
1a890 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20  stored with the 
1a8a0 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73  in-memory repres
1a8b0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
1a8c0 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a  schema, do.    *
1a8d0 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65  * not reload the
1a8e0 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65   schema from the
1a8f0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
1a900 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66      **.    ** If
1a910 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20   virtual-tables 
1a920 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73  are in use, this
1a930 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20   is not just an 
1a940 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20  optimization..  
1a950 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61    ** Often, v-ta
1a960 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69 72  bles store their
1a970 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53   data in other S
1a980 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68  QLite tables, wh
1a990 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71  ich.    ** are q
1a9a0 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68  ueried from with
1a9b0 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f  in xNext() and o
1a9c0 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74  ther v-table met
1a9d0 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a  hods using.    *
1a9e0 2a 20 70 72 65 70 61 72 65 64 20 71 75 65 72 69  * prepared queri
1a9f0 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 71 75  es. If such a qu
1aa00 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61  ery is out-of-da
1aa10 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61  te, we do not wa
1aa20 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73  nt to.    ** dis
1aa30 63 61 72 64 20 74 68 65 20 64 61 74 61 62 61 73  card the databas
1aa40 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65  e schema, as the
1aa50 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65   user code imple
1aa60 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20  menting the.    
1aa70 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64  ** v-table would
1aa80 20 68 61 76 65 20 74 6f 20 62 65 20 72 65 61 64   have to be read
1aa90 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  y for the sqlite
1aaa0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
1aab0 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74   itself.    ** t
1aac0 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64  o be invalidated
1aad0 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65   whenever sqlite
1aae0 33 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c  3_step() is call
1aaf0 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a  ed from within .
1ab00 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65      ** a v-table
1ab10 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a   method..    */.
1ab20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
1ab30 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61  pOp->p1].pSchema
1ab40 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21  ->schema_cookie!
1ab50 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20  =iMeta ){.      
1ab60 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
1ab70 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70  chema(db, pOp->p
1ab80 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  1);.    }.    p-
1ab90 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20  >expired = 1;.  
1aba0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43    rc = SQLITE_SC
1abb0 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 69 66 28 20  HEMA;.  }.  if( 
1abc0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
1abd0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1abe0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1abf0 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20  ode: ReadCookie 
1ac00 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1ac10 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e  ** Read cookie n
1ac20 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61  umber P3 from da
1ac30 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77 72  tabase P1 and wr
1ac40 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69  ite it into regi
1ac50 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d  ster P2..** P3==
1ac60 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20  1 is the schema 
1ac70 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20  version.  P3==2 
1ac80 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
1ac90 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33  format..** P3==3
1aca0 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e   is the recommen
1acb0 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20  ded pager cache 
1acc0 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
1acd0 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a  th.  P1==0 is.**
1ace0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1acf0 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
1ad00 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
1ad10 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73  e file used to s
1ad20 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  tore.** temporar
1ad30 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
1ad40 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 20  There must be a 
1ad50 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65  read-lock on the
1ad60 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68 65   database (eithe
1ad70 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  r a transaction.
1ad80 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  ** must be start
1ad90 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74  ed or there must
1ada0 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73   be an open curs
1adb0 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78  or) before.** ex
1adc0 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73  ecuting this ins
1add0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
1ade0 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a  e OP_ReadCookie:
1adf0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1ae00 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e   /* out2 */.  in
1ae10 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69  t iMeta;.  int i
1ae20 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69  Db;.  int iCooki
1ae30 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  e;..  assert( p-
1ae40 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
1ae50 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
1ae60 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e   iCookie = pOp->
1ae70 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p3;.  assert( pO
1ae80 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42  p->p3<SQLITE_N_B
1ae90 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61  TREE_META );.  a
1aea0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
1aeb0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
1aec0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44    assert( db->aD
1aed0 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b  b[iDb].pBt!=0 );
1aee0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1aef0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1af00 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20 20 73  sk, iDb) );..  s
1af10 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65  qlite3BtreeGetMe
1af20 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ta(db->aDb[iDb].
1af30 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75  pBt, iCookie, (u
1af40 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20  32 *)&iMeta);.  
1af50 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
1af60 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
1af70 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65   pOut->u.i = iMe
1af80 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ta;.  break;.}..
1af90 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f  /* Opcode: SetCo
1afa0 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20  okie P1 P2 P3 * 
1afb0 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
1afc0 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
1afd0 50 33 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e  P3 into cookie n
1afe0 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61  umber P2 of data
1aff0 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d  base P1..** P2==
1b000 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20  1 is the schema 
1b010 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 32 20  version.  P2==2 
1b020 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
1b030 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d 33  format..** P2==3
1b040 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e   is the recommen
1b050 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20  ded pager cache 
1b060 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  .** size, and so
1b070 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
1b080 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
1b090 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
1b0a0 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61  =1 is the .** da
1b0b0 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
1b0c0 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72   to store tempor
1b0d0 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
1b0e0 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  * A transaction 
1b0f0 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
1b100 62 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67  before executing
1b110 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f   this opcode..*/
1b120 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b  .case OP_SetCook
1b130 69 65 3a 20 7b 0a 20 20 44 62 20 2a 70 44 62 3b  ie: {.  Db *pDb;
1b140 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1b150 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45  p2<SQLITE_N_BTRE
1b160 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65  E_META );.  asse
1b170 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1b180 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
1b190 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
1b1a0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
1b1b0 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
1b1c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1b1d0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
1b1e0 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
1b1f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1b200 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
1b210 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
1b220 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
1b230 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Held(db, pOp->p1
1b240 2c 20 30 29 20 29 3b 0a 20 20 2f 2a 20 53 65 65  , 0) );.  /* See
1b250 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65   note about inde
1b260 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50  x shifting on OP
1b270 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20  _ReadCookie */. 
1b280 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b290 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62  eeUpdateMeta(pDb
1b2a0 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  ->pBt, pOp->p2, 
1b2b0 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20  pOp->p3);.  if( 
1b2c0 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53  pOp->p2==BTREE_S
1b2d0 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b  CHEMA_VERSION ){
1b2e0 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65  .    /* When the
1b2f0 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
1b300 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74  hanges, record t
1b310 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e  he new cookie in
1b320 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20  ternally */.    
1b330 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63  pDb->pSchema->sc
1b340 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 70 4f  hema_cookie = pO
1b350 70 2d 3e 70 33 3b 0a 20 20 20 20 64 62 2d 3e 66  p->p3;.    db->f
1b360 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49  lags |= SQLITE_I
1b370 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20  nternChanges;.  
1b380 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
1b390 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f  2==BTREE_FILE_FO
1b3a0 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52  RMAT ){.    /* R
1b3b0 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e  ecord changes in
1b3c0 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74   the file format
1b3d0 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
1b3e0 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
1b3f0 74 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  t = pOp->p3;.  }
1b400 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
1b410 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61  1 ){.    /* Inva
1b420 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61  lidate all prepa
1b430 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
1b440 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50  henever the TEMP
1b450 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a   database.    **
1b460 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67   schema is chang
1b470 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34  ed.  Ticket #164
1b480 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  4 */.    sqlite3
1b490 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
1b4a0 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
1b4b0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
1b4c0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
1b4d0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1b4e0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
1b4f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1b500 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20   OpenRead P1 P2 
1b510 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
1b520 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
1b530 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  b=P3.**.** Open 
1b540 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73  a read-only curs
1b550 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  or for the datab
1b560 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20  ase table whose 
1b570 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20  root page is.** 
1b580 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  P2 in a database
1b590 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61   file.  The data
1b5a0 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74  base file is det
1b5b0 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a  ermined by P3. .
1b5c0 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74  ** P3==0 means t
1b5d0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1b5e0 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68  , P3==1 means th
1b5f0 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  e database used 
1b600 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  for .** temporar
1b610 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33  y tables, and P3
1b620 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68  >1 means used th
1b630 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1b640 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61  attached.** data
1b650 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20  base.  Give the 
1b660 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64  new cursor an id
1b670 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20  entifier of P1. 
1b680 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65   The P1.** value
1b690 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f  s need not be co
1b6a0 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c  ntiguous but all
1b6b0 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c   P1 values shoul
1b6c0 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67  d be small integ
1b6d0 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e  ers..** It is an
1b6e0 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f   error for P1 to
1b6f0 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a   be negative..**
1b700 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
1b710 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  n use the conten
1b720 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
1b730 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67   as the root pag
1b740 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61  e, not.** the va
1b750 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66  lue of P2 itself
1b760 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69  ..**.** There wi
1b770 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63  ll be a read loc
1b780 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
1b790 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65  e whenever there
1b7a0 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63   is an.** open c
1b7b0 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64  ursor.  If the d
1b7c0 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f  atabase was unlo
1b7d0 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  cked prior to th
1b7e0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  is instruction.*
1b7f0 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f  * then a read lo
1b800 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61  ck is acquired a
1b810 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69  s part of this i
1b820 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72  nstruction.  A r
1b830 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f  ead.** lock allo
1b840 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ws other process
1b850 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64  es to read the d
1b860 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68  atabase but proh
1b870 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68  ibits.** any oth
1b880 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20  er process from 
1b890 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61  modifying the da
1b8a0 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61  tabase.  The rea
1b8b0 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c  d lock is.** rel
1b8c0 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63  eased when all c
1b8d0 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65  ursors are close
1b8e0 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74  d.  If this inst
1b8f0 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73  ruction attempts
1b900 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61  .** to get a rea
1b910 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73  d lock but fails
1b920 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72  , the script ter
1b930 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a  minates with an.
1b940 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65  ** SQLITE_BUSY e
1b950 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  rror code..**.**
1b960 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
1b970 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
1b980 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
1b990 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
1b9a0 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
1b9b0 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
1b9c0 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
1b9d0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
1b9e0 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
1b9f0 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
1ba00 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
1ba10 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
1ba20 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
1ba30 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
1ba40 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
1ba50 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
1ba60 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
1ba70 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
1ba80 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
1ba90 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1baa0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a   in the table..*
1bab0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f  *.** See also: O
1bac0 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e  penWrite, Reopen
1bad0 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  Idx.*/./* Opcode
1bae0 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50  : ReopenIdx P1 P
1baf0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
1bb00 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
1bb10 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65  iDb=P3.**.** The
1bb20 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64   ReopenIdx opcod
1bb30 65 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  e works exactly 
1bb40 6c 69 6b 65 20 52 65 61 64 4f 70 65 6e 20 65 78  like ReadOpen ex
1bb50 63 65 70 74 20 74 68 61 74 20 69 74 20 66 69 72  cept that it fir
1bb60 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20  st.** checks to 
1bb70 73 65 65 20 69 66 20 74 68 65 20 63 75 72 73 6f  see if the curso
1bb80 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72 65 61  r on P1 is alrea
1bb90 64 79 20 6f 70 65 6e 20 77 69 74 68 20 61 20 72  dy open with a r
1bba0 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62  oot page.** numb
1bbb0 65 72 20 6f 66 20 50 32 20 61 6e 64 20 69 66 20  er of P2 and if 
1bbc0 69 74 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64  it is this opcod
1bbd0 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f  e becomes a no-o
1bbe0 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  p.  In other wor
1bbf0 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75  ds,.** if the cu
1bc00 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20  rsor is already 
1bc10 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f  open, do not reo
1bc20 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  pen it..**.** Th
1bc30 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f  e ReopenIdx opco
1bc40 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75  de may only be u
1bc50 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30 20 61  sed with P5==0 a
1bc60 6e 64 20 77 69 74 68 20 50 34 20 62 65 69 6e 67  nd with P4 being
1bc70 0a 2a 2a 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f  .** a P4_KEYINFO
1bc80 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74 68 65   object.  Furthe
1bc90 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20 76 61  rmore, the P3 va
1bca0 6c 75 65 20 6d 75 73 74 20 62 65 20 74 68 65 20  lue must be the 
1bcb0 73 61 6d 65 20 61 73 0a 2a 2a 20 65 76 65 72 79  same as.** every
1bcc0 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49 64 78   other ReopenIdx
1bcd0 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66 6f 72   or OpenRead for
1bce0 20 74 68 65 20 73 61 6d 65 20 63 75 72 73 6f 72   the same cursor
1bcf0 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53   number..**.** S
1bd00 65 65 20 74 68 65 20 4f 70 65 6e 52 65 61 64 20  ee the OpenRead 
1bd10 6f 70 63 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61  opcode documenta
1bd20 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
1bd30 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
1bd40 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1bd50 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50  penWrite P1 P2 P
1bd60 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1bd70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1bd80 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P3.**.** Open a
1bd90 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
1bda0 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74  or named P1 on t
1bdb0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
1bdc0 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20  x whose root.** 
1bdd0 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20  page is P2.  Or 
1bde0 69 66 20 50 35 21 3d 30 20 75 73 65 20 74 68 65  if P5!=0 use the
1bdf0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1be00 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20  ster P2 to find 
1be10 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  the.** root page
1be20 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
1be30 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1be40 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1be50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1be60 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1be70 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1be80 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1be90 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1bea0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1beb0 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
1bec0 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
1bed0 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
1bee0 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1bef0 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1bf00 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
1bf10 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
1bf20 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
1bf30 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
1bf40 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
1bf50 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
1bf60 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
1bf70 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a  able, or to the.
1bf80 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78  ** largest index
1bf90 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f   of any column o
1bfa0 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
1bfb0 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65   is actually use
1bfc0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  d..**.** This in
1bfd0 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20  struction works 
1bfe0 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65  just like OpenRe
1bff0 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ad except that i
1c000 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73  t opens the curs
1c010 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72  or.** in read/wr
1c020 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61  ite mode.  For a
1c030 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68   given table, th
1c040 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f  ere can be one o
1c050 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79  r more read-only
1c060 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61  .** cursors or a
1c070 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69   single read/wri
1c080 74 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f  te cursor but no
1c090 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65  t both..**.** Se
1c0a0 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e  e also OpenRead.
1c0b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70  .*/.case OP_Reop
1c0c0 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e 74 20 6e  enIdx: {.  int n
1c0d0 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f  Field;.  KeyInfo
1c0e0 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
1c0f0 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b  t p2;.  int iDb;
1c100 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20  .  int wrFlag;. 
1c110 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64   Btree *pX;.  Vd
1c120 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
1c130 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73    Db *pDb;..  as
1c140 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1c150 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46   || pOp->p5==OPF
1c160 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20  LAG_SEEKEQ );.  
1c170 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1c180 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1c190 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  );.  pCur = p->a
1c1a0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1c1b0 20 69 66 28 20 70 43 75 72 20 26 26 20 70 43 75   if( pCur && pCu
1c1c0 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33  r->pgnoRoot==(u3
1c1d0 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20  2)pOp->p2 ){.   
1c1e0 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 69   assert( pCur->i
1c1f0 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20  Db==pOp->p3 );  
1c200 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65 65      /* Guarantee
1c210 64 20 62 79 20 74 68 65 20 63 6f 64 65 20 67 65  d by the code ge
1c220 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 67  nerator */.    g
1c230 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73 6f 72 5f  oto open_cursor_
1c240 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a 20  set_hints;.  }. 
1c250 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f   /* If the curso
1c260 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  r is not current
1c270 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70  ly open or is op
1c280 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72 65 6e  en on a differen
1c290 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68  t.  ** index, th
1c2a0 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
1c2b0 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64  into OP_OpenRead
1c2c0 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65 6f 70   to force a reop
1c2d0 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  en */.case OP_Op
1c2e0 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f  enRead:.case OP_
1c2f0 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20 20 61 73  OpenWrite:..  as
1c300 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1c310 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1c320 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  || pOp->p5==0 ||
1c330 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47   pOp->p5==OPFLAG
1c340 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73  _SEEKEQ );.  ass
1c350 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
1c360 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1c370 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1c380 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e  penRead || pOp->
1c390 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65  opcode==OP_Reope
1c3a0 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c  nIdx.          |
1c3b0 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  | p->readOnly==0
1c3c0 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78   );..  if( p->ex
1c3d0 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20  pired ){.    rc 
1c3e0 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  = SQLITE_ABORT_R
1c3f0 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 67 6f 74  OLLBACK;.    got
1c400 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1c410 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69  rror;.  }..  nFi
1c420 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49  eld = 0;.  pKeyI
1c430 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20  nfo = 0;.  p2 = 
1c440 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d  pOp->p2;.  iDb =
1c450 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
1c460 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
1c470 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
1c480 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1c490 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1c4a0 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20 3d 20  iDb) );.  pDb = 
1c4b0 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20  &db->aDb[iDb];. 
1c4c0 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a   pX = pDb->pBt;.
1c4d0 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20    assert( pX!=0 
1c4e0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
1c4f0 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69  code==OP_OpenWri
1c500 74 65 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  te ){.    assert
1c510 28 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  ( OPFLAG_FORDELE
1c520 54 45 3d 3d 42 54 52 45 45 5f 46 4f 52 44 45 4c  TE==BTREE_FORDEL
1c530 45 54 45 20 29 3b 0a 20 20 20 20 77 72 46 6c 61  ETE );.    wrFla
1c540 67 20 3d 20 42 54 52 45 45 5f 57 52 43 53 52 20  g = BTREE_WRCSR 
1c550 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  | (pOp->p5 & OPF
1c560 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29 3b 0a  LAG_FORDELETE);.
1c570 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
1c580 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
1c590 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
1c5a0 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70  ;.    if( pDb->p
1c5b0 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
1c5c0 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74  mat < p->minWrit
1c5d0 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20  eFileFormat ){. 
1c5e0 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65       p->minWrite
1c5f0 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62  FileFormat = pDb
1c600 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1c610 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20  format;.    }.  
1c620 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61  }else{.    wrFla
1c630 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  g = 0;.  }.  if(
1c640 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1c650 47 5f 50 32 49 53 52 45 47 20 29 7b 0a 20 20 20  G_P2ISREG ){.   
1c660 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b   assert( p2>0 );
1c670 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c  .    assert( p2<
1c680 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
1c690 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
1c6a0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32   pIn2 = &aMem[p2
1c6b0 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ];.    assert( m
1c6c0 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20  emIsValid(pIn2) 
1c6d0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
1c6e0 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
1c6f0 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20  M_Int)!=0 );.   
1c700 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
1c710 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
1c720 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70  .    p2 = (int)p
1c730 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a  In2->u.i;.    /*
1c740 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c   The p2 value al
1c750 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20  ways comes from 
1c760 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74  a prior OP_Creat
1c770 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e  eTable opcode an
1c780 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70  d.    ** that op
1c790 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
1c7a0 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75   set the p2 valu
1c7b0 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f  e to 2 or more o
1c7c0 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20  r else fail..   
1c7d0 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72   ** If there wer
1c7e0 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65  e a failure, the
1c7f0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
1c800 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68  ent would have h
1c810 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66  alted.    ** bef
1c820 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69  ore reaching thi
1c830 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a  s instruction. *
1c840 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  /.    assert( p2
1c850 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  >=2 );.  }.  if(
1c860 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1c870 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20  _KEYINFO ){.    
1c880 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1c890 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
1c8a0 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1c8b0 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1c8c0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1c8d0 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20  KeyInfo->db==db 
1c8e0 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  );.    nField = 
1c8f0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
1c900 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65  +pKeyInfo->nXFie
1c910 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ld;.  }else if( 
1c920 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1c930 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69  INT32 ){.    nFi
1c940 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1c950 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1c960 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1c970 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30  ssert( nField>=0
1c980 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
1c990 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a  nField==0 );  /*
1c9a0 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45   Table with INTE
1c9b0 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
1c9c0 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65  and nothing else
1c9d0 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c   */.  pCur = all
1c9e0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1c9f0 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20  Op->p1, nField, 
1ca00 69 44 62 2c 20 43 55 52 54 59 50 45 5f 42 54 52  iDb, CURTYPE_BTR
1ca10 45 45 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d  EE);.  if( pCur=
1ca20 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1ca30 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
1ca40 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69  w = 1;.  pCur->i
1ca50 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20  sOrdered = 1;.  
1ca60 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d  pCur->pgnoRoot =
1ca70 20 70 32 3b 0a 23 69 66 64 65 66 20 53 51 4c 49   p2;.#ifdef SQLI
1ca80 54 45 5f 44 45 42 55 47 0a 20 20 70 43 75 72 2d  TE_DEBUG.  pCur-
1ca90 3e 77 72 46 6c 61 67 20 3d 20 77 72 46 6c 61 67  >wrFlag = wrFlag
1caa0 3b 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20  ;.#endif.  rc = 
1cab0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1cac0 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61  or(pX, p2, wrFla
1cad0 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75  g, pKeyInfo, pCu
1cae0 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  r->uc.pCursor);.
1caf0 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f    pCur->pKeyInfo
1cb00 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f   = pKeyInfo;.  /
1cb10 2a 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75  * Set the VdbeCu
1cb20 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72  rsor.isTable var
1cb30 69 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20  iable. Previous 
1cb40 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a  versions of.  **
1cb50 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20   SQLite used to 
1cb60 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f  check if the roo
1cb70 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72  t-page flags wer
1cb80 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70  e sane at this p
1cb90 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65  oint.  ** and re
1cba0 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f  port database co
1cbb0 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79  rruption if they
1cbc0 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74   were not, but t
1cbd0 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20  his check has.  
1cbe0 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69  ** since moved i
1cbf0 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61  nto the btree la
1cc00 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75  yer.  */  .  pCu
1cc10 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70  r->isTable = pOp
1cc20 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59  ->p4type!=P4_KEY
1cc30 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73  INFO;..open_curs
1cc40 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20  or_set_hints:.  
1cc50 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42  assert( OPFLAG_B
1cc60 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55  ULKCSR==BTREE_BU
1cc70 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 61 73 73 65  LKLOAD );.  asse
1cc80 72 74 28 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  rt( OPFLAG_SEEKE
1cc90 51 3d 3d 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  Q==BTREE_SEEK_EQ
1cca0 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
1ccb0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1ccc0 5f 42 55 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64  _BULKCSR );.#ifd
1ccd0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1cce0 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 20 20  _CURSOR_HINTS.  
1ccf0 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
1cd00 32 20 26 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  2 & OPFLAG_SEEKE
1cd10 51 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71  Q );.#endif.  sq
1cd20 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1cd30 48 69 6e 74 46 6c 61 67 73 28 70 43 75 72 2d 3e  HintFlags(pCur->
1cd40 75 63 2e 70 43 75 72 73 6f 72 2c 0a 20 20 20 20  uc.pCursor,.    
1cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd60 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d             (pOp-
1cd70 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 42 55  >p5 & (OPFLAG_BU
1cd80 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45  LKCSR|OPFLAG_SEE
1cd90 4b 45 51 29 29 29 3b 0a 20 20 69 66 28 20 72 63  KEQ)));.  if( rc
1cda0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1cdb0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
1cdc0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1cdd0 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  e: OpenEphemeral
1cde0 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a   P1 P2 * P4 P5.*
1cdf0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1ce00 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65  umn=P2.**.** Ope
1ce10 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50  n a new cursor P
1ce20 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74  1 to a transient
1ce30 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
1ce40 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20  ursor is always 
1ce50 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74  opened read/writ
1ce60 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68  e even if .** th
1ce70 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1ce80 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54  is read-only.  T
1ce90 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20  he ephemeral.** 
1cea0 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64  table is deleted
1ceb0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77   automatically w
1cec0 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1ced0 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  s closed..**.** 
1cee0 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
1cef0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1cf00 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
1cf10 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1cf20 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54  r points to a BT
1cf30 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d  ree table if P4=
1cf40 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65  =0 and to a BTre
1cf50 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34  e index.** if P4
1cf60 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50   is not 0.  If P
1cf70 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69  4 is not NULL, i
1cf80 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65  t points to a Ke
1cf90 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a  yInfo structure.
1cfa0 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ** that defines 
1cfb0 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65  the format of ke
1cfc0 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ys in the index.
1cfd0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  .**.** The P5 pa
1cfe0 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61  rameter can be a
1cff0 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52   mask of the BTR
1d000 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  EE_* flags defin
1d010 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68  ed.** in btree.h
1d020 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63  .  These flags c
1d030 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f  ontrol aspects o
1d040 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  f the operation 
1d050 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e  of.** the btree.
1d060 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54    The BTREE_OMIT
1d070 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52  _JOURNAL and BTR
1d080 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20  EE_SINGLE flags 
1d090 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74  are.** added aut
1d0a0 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f  omatically..*/./
1d0b0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75  * Opcode: OpenAu
1d0c0 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20  toindex P1 P2 * 
1d0d0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1d0e0 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a  : nColumn=P2.**.
1d0f0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1d100 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73  orks the same as
1d110 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1d120 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20  l.  It has a.** 
1d130 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74  different name t
1d140 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74  o distinguish it
1d150 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63  s use.  Tables c
1d160 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20  reated using.** 
1d170 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  by this opcode w
1d180 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
1d190 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
1d1a0 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a  eated transient.
1d1b0 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f  ** indices in jo
1d1c0 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ins..*/.case OP_
1d1d0 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a  OpenAutoindex: .
1d1e0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  case OP_OpenEphe
1d1f0 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43  meral: {.  VdbeC
1d200 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65  ursor *pCx;.  Ke
1d210 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1d220 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ..  static const
1d230 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20   int vfsFlags = 
1d240 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1d250 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20  EN_READWRITE |. 
1d260 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1d270 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20  _CREATE |.      
1d280 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c  SQLITE_OPEN_EXCL
1d290 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51  USIVE |.      SQ
1d2a0 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45  LITE_OPEN_DELETE
1d2b0 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20  ONCLOSE |.      
1d2c0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e  SQLITE_OPEN_TRAN
1d2d0 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65  SIENT_DB;.  asse
1d2e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1d2f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1d300 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1d310 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1d320 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1d330 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p2, -1, CURTYP
1d340 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20  E_BTREE);.  if( 
1d350 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1d360 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1d370 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1d380 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31  >isEphemeral = 1
1d390 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1d3a0 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56  BtreeOpen(db->pV
1d3b0 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d  fs, 0, db, &pCx-
1d3c0 3e 70 42 74 78 2c 20 0a 20 20 20 20 20 20 20 20  >pBtx, .        
1d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3e0 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
1d3f0 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c  AL | BTREE_SINGL
1d400 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73  E | pOp->p5, vfs
1d410 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63  Flags);.  if( rc
1d420 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1d430 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1d440 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
1d450 43 78 2d 3e 70 42 74 78 2c 20 31 29 3b 0a 20 20  Cx->pBtx, 1);.  
1d460 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  }.  if( rc==SQLI
1d470 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20  TE_OK ){.    /* 
1d480 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  If a transient i
1d490 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64  ndex is required
1d4a0 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63  , create it by c
1d4b0 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71  alling.    ** sq
1d4c0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1d4d0 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65  Table() with the
1d4e0 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66   BTREE_BLOBKEY f
1d4f0 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a  lag before.    *
1d500 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66  * opening it. If
1d510 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1d520 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  le is required, 
1d530 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20  just use the.   
1d540 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   ** automaticall
1d550 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20  y created table 
1d560 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31  with root-page 1
1d570 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59   (an BLOB_INTKEY
1d580 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a   table)..    */.
1d590 20 20 20 20 69 66 28 20 28 70 43 78 2d 3e 70 4b      if( (pCx->pK
1d5a0 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66  eyInfo = pKeyInf
1d5b0 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1d5c0 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20  Info)!=0 ){.    
1d5d0 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20    int pgno;.    
1d5e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d5f0 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1d600 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  O );.      rc = 
1d610 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
1d620 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74  teTable(pCx->pBt
1d630 78 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f  x, &pgno, BTREE_
1d640 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70  BLOBKEY | pOp->p
1d650 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72  5); .      if( r
1d660 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1d670 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1d680 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f  pgno==MASTER_ROO
1d690 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 61  T+1 );.        a
1d6a0 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1d6b0 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20  >db==db );.     
1d6c0 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1d6d0 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1d6e0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  ) );.        rc 
1d6f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1d700 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20  rsor(pCx->pBtx, 
1d710 70 67 6e 6f 2c 20 42 54 52 45 45 5f 57 52 43 53  pgno, BTREE_WRCS
1d720 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  R,.             
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d740 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78     pKeyInfo, pCx
1d750 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
1d760 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78       }.      pCx
1d770 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20  ->isTable = 0;. 
1d780 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1d790 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d7a0 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1d7b0 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  x, MASTER_ROOT, 
1d7c0 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20  BTREE_WRCSR,.   
1d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7e0 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 70 43             0, pC
1d7f0 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  x->uc.pCursor);.
1d800 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62        pCx->isTab
1d810 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  le = 1;.    }.  
1d820 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
1d830 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1d840 72 72 6f 72 3b 0a 20 20 70 43 78 2d 3e 69 73 4f  rror;.  pCx->isO
1d850 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70  rdered = (pOp->p
1d860 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52  5!=BTREE_UNORDER
1d870 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ED);.  break;.}.
1d880 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
1d890 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20  erOpen P1 P2 P3 
1d8a0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4 *.**.** This 
1d8b0 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b  opcode works lik
1d8c0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  e OP_OpenEphemer
1d8d0 61 6c 20 65 78 63 65 70 74 20 74 68 61 74 20 69  al except that i
1d8e0 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61  t opens.** a tra
1d8f0 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61  nsient index tha
1d900 74 20 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c  t is specificall
1d910 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f  y designed to so
1d920 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c  rt large.** tabl
1d930 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65  es using an exte
1d940 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20  rnal merge-sort 
1d950 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a  algorithm..**.**
1d960 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33 20   If argument P3 
1d970 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
1d980 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73 20 74  n it indicates t
1d990 68 61 74 20 74 68 65 20 73 6f 72 74 65 72 20 6d  hat the sorter m
1d9a0 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68 61  ay.** assume tha
1d9b0 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74 20  t a stable sort 
1d9c0 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65 20  considering the 
1d9d0 66 69 72 73 74 20 50 33 20 66 69 65 6c 64 73 20  first P3 fields 
1d9e0 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69  of each.** key i
1d9f0 73 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20  s sufficient to 
1da00 70 72 6f 64 75 63 65 20 74 68 65 20 72 65 71 75  produce the requ
1da10 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f  ired results..*/
1da20 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f  .case OP_SorterO
1da30 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  pen: {.  VdbeCur
1da40 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73  sor *pCx;..  ass
1da50 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1da60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1da70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p2>=0 );.  pCx
1da80 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1da90 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1daa0 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59  p->p2, -1, CURTY
1dab0 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69 66  PE_SORTER);.  if
1dac0 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1dad0 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70  no_mem;.  pCx->p
1dae0 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1daf0 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
1db00 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1db10 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1db20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b   assert( pCx->pK
1db30 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1db40 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (db) );.  rc = s
1db50 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
1db60 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33  Init(db, pOp->p3
1db70 2c 20 70 43 78 29 3b 0a 20 20 69 66 28 20 72 63  , pCx);.  if( rc
1db80 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1db90 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
1dba0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1dbb0 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74 20  e: SequenceTest 
1dbc0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
1dbd0 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72  ynopsis: if( cur
1dbe0 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20  sor[P1].ctr++ ) 
1dbf0 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31  pc = P2.**.** P1
1dc00 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72   is a sorter cur
1dc10 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71 75  sor. If the sequ
1dc20 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ence counter is 
1dc30 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20  currently zero, 
1dc40 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52  jump.** to P2. R
1dc50 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
1dc60 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
1dc70 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69  jump is taken, i
1dc80 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  ncrement the.** 
1dc90 74 68 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c  the sequence val
1dca0 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ue..*/.case OP_S
1dcb0 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20  equenceTest: {. 
1dcc0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1dcd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1dce0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1dcf0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1dd00 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1dd10 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1dd20 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
1dd30 29 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65  );.  if( (pC->se
1dd40 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a  qCount++)==0 ){.
1dd50 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
1dd60 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
1dd70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1dd80 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32  OpenPseudo P1 P2
1dd90 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
1dda0 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20  sis: P3 columns 
1ddb0 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f  in r[P2].**.** O
1ddc0 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
1ddd0 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
1dde0 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61  a fake table tha
1ddf0 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e  t contains a sin
1de00 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61  gle.** row of da
1de10 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  ta.  The content
1de20 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77   of that one row
1de30 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   is the content 
1de40 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67  of memory.** reg
1de50 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74  ister P2.  In ot
1de60 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f  her words, curso
1de70 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20  r P1 becomes an 
1de80 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a  alias for the .*
1de90 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65  * MEM_Blob conte
1dea0 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  nt contained in 
1deb0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
1dec0 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c  ** A pseudo-tabl
1ded0 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69  e created by thi
1dee0 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
1def0 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c   to hold a singl
1df00 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20  e.** row output 
1df10 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20  from the sorter 
1df20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20  so that the row 
1df30 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65  can be decompose
1df40 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69  d into.** indivi
1df50 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69  dual columns usi
1df60 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  ng the OP_Column
1df70 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50   opcode.  The OP
1df80 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a  _Column opcode.*
1df90 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75  * is the only cu
1dfa0 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74  rsor opcode that
1dfb0 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73   works with a ps
1dfc0 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
1dfd0 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62  * P3 is the numb
1dfe0 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
1dff0 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74  the records that
1e000 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
1e010 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f  by.** the pseudo
1e020 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
1e030 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b  OP_OpenPseudo: {
1e040 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1e050 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
1e060 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1e070 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d  ssert( pOp->p3>=
1e080 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1e090 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1e0a0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c  Op->p1, pOp->p3,
1e0b0 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 50 53 45   -1, CURTYPE_PSE
1e0c0 55 44 4f 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  UDO);.  if( pCx=
1e0d0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1e0e0 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1e0f0 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 75 63 2e   = 1;.  pCx->uc.
1e100 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d  pseudoTableReg =
1e110 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d   pOp->p2;.  pCx-
1e120 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
1e130 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
1e140 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  =0 );.  break;.}
1e150 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f  ../* Opcode: Clo
1e160 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  se P1 * * * *.**
1e170 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73  .** Close a curs
1e180 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  or previously op
1e190 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20  ened as P1.  If 
1e1a0 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72  P1 is not.** cur
1e1b0 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69  rently open, thi
1e1c0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
1e1d0 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
1e1e0 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20  e OP_Close: {.  
1e1f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1e200 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1e210 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71  >nCursor );.  sq
1e220 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72  lite3VdbeFreeCur
1e230 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b  sor(p, p->apCsr[
1e240 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e  pOp->p1]);.  p->
1e250 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d  apCsr[pOp->p1] =
1e260 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
1e270 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1e280 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44  ABLE_COLUMN_USED
1e290 5f 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _MASK./* Opcode:
1e2a0 20 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20   ColumnsUsed P1 
1e2b0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54  * * P4 *.**.** T
1e2c0 68 69 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63  his opcode (whic
1e2d0 68 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66  h only exists if
1e2e0 20 53 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70   SQLite was comp
1e2f0 69 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c  iled with.** SQL
1e300 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
1e310 4e 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65  N_USED_MASK) ide
1e320 6e 74 69 66 69 65 73 20 77 68 69 63 68 20 63 6f  ntifies which co
1e330 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20  lumns of the.** 
1e340 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66  table or index f
1e350 6f 72 20 63 75 72 73 6f 72 20 50 31 20 61 72 65  or cursor P1 are
1e360 20 75 73 65 64 2e 20 20 50 34 20 69 73 20 61 20   used.  P4 is a 
1e370 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a  64-bit integer.*
1e380 2a 20 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20  * (P4_INT64) in 
1e390 77 68 69 63 68 20 74 68 65 20 66 69 72 73 74 20  which the first 
1e3a0 36 33 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20  63 bits are one 
1e3b0 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a  for each of the.
1e3c0 2a 2a 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75  ** first 63 colu
1e3d0 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
1e3e0 20 6f 72 20 69 6e 64 65 78 20 74 68 61 74 20 61   or index that a
1e3f0 72 65 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64  re actually used
1e400 0a 2a 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f  .** by the curso
1e410 72 2e 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64  r.  The high-ord
1e420 65 72 20 62 69 74 20 69 73 20 73 65 74 20 69 66  er bit is set if
1e430 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65   any column afte
1e440 72 0a 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73  r.** the 64th is
1e450 20 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f   used..*/.case O
1e460 50 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b  P_ColumnsUsed: {
1e470 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1e480 43 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  C;.  pC = p->apC
1e490 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1e4a0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
1e4b0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
1e4c0 45 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b  EE );.  pC->mask
1e4d0 55 73 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f  Used = *(u64*)pO
1e4e0 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72  p->p4.pI64;.  br
1e4f0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
1e500 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45  * Opcode: SeekGE
1e510 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1e520 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1e530 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1e540 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1e550 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1e560 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1e570 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1e580 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1e590 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1e5a0 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e  r P3 as the key.
1e5b0 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72    If cursor P1 r
1e5c0 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1e5d0 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1e5e0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1e5f0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1e600 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1e610 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1e620 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1e630 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1e640 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1e650 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1e660 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1e670 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1e680 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1e690 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1e6a0 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1e6b0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1e6c0 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65   records .** gre
1e6d0 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1e6e0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1e6f0 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1e700 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1e710 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
1e720 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70  cursor P1 was op
1e730 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f  ened using the O
1e740 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61  PFLAG_SEEKEQ fla
1e750 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20  g, then this.** 
1e760 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61  opcode will alwa
1e770 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63  ys land on a rec
1e780 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79  ord that equally
1e790 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c   equals the key,
1e7a0 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70   or.** else jump
1e7b0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1e7c0 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75  P2.  When the cu
1e7d0 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53  rsor is OPFLAG_S
1e7e0 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f  EEKEQ, this.** o
1e7f0 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f  pcode must be fo
1e800 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78  llowed by an Idx
1e810 4c 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74  LE opcode with t
1e820 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74  he same argument
1e830 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45 20  s..** The IdxLE 
1e840 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  opcode will be s
1e850 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f  kipped if this o
1e860 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20  pcode succeeds, 
1e870 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45  but the.** IdxLE
1e880 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1e890 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65  used on subseque
1e8a0 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f  nt loop iteratio
1e8b0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ns..**.** This o
1e8c0 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
1e8d0 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
1e8e0 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f  ed to move in fo
1e8f0 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20  rward order,.** 
1e900 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
1e910 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng toward the en
1e920 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
1e930 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
1e940 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
1e950 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74  to use Next, not
1e960 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Prev..**.** See
1e970 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1e980 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20  tFound, SeekLt, 
1e990 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGt, SeekLe.*
1e9a0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1e9b0 6b 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20  kGT P1 P2 P3 P4 
1e9c0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1e9d0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1e9e0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1e9f0 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1ea00 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1ea10 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1ea20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1ea30 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1ea40 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
1ea50 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
1ea60 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1ea70 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1ea80 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1ea90 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1eaa0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1eab0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1eac0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1ead0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1eae0 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1eaf0 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1eb00 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1eb10 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1eb20 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1eb30 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1eb40 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1eb50 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65  e no records gre
1eb60 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68  ater than .** th
1eb70 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1eb80 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1eb90 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1eba0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1ebb0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1ebc0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1ebd0 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
1ebe0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1ebf0 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
1ec00 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
1ec10 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1ec20 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1ec30 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
1ec40 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a  xt, not Prev..**
1ec50 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1ec60 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1ec70 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekLt, SeekGe, S
1ec80 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1ec90 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32  de: SeekLT P1 P2
1eca0 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e   P3 P4 * .** Syn
1ecb0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1ecc0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1ecd0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1ece0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1ecf0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1ed00 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1ed10 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1ed20 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1ed30 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1ed40 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1ed50 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1ed60 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1ed70 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1ed80 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1ed90 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1eda0 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1edb0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1edc0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1edd0 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1ede0 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1edf0 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1ee00 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1ee10 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
1ee20 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1ee30 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1ee40 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74   less than .** t
1ee50 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1ee60 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1ee70 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1ee80 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1ee90 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1eea0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
1eeb0 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
1eec0 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
1eed0 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
1eee0 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
1eef0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1ef00 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
1ef10 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
1ef20 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
1ef30 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1ef40 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1ef50 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1ef60 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1ef70 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50  ode: SeekLE P1 P
1ef80 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1ef90 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1efa0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1efb0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1efc0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1efd0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1efe0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1eff0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1f000 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1f010 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1f020 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1f030 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1f040 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1f050 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1f060 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1f070 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1f080 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1f090 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1f0a0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1f0b0 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1f0c0 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1f0d0 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1f0e0 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1f0f0 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
1f100 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
1f110 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1f120 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
1f130 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1f140 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1f150 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1f160 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1f170 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
1f180 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1f190 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1f1a0 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
1f1b0 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
1f1c0 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
1f1d0 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
1f1e0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1f1f0 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1f200 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1f210 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
1f220 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  Next..**.** If t
1f230 68 65 20 63 75 72 73 6f 72 20 50 31 20 77 61 73  he cursor P1 was
1f240 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68   opened using th
1f250 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  e OPFLAG_SEEKEQ 
1f260 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a  flag, then this.
1f270 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  ** opcode will a
1f280 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20  lways land on a 
1f290 72 65 63 6f 72 64 20 74 68 61 74 20 65 71 75 61  record that equa
1f2a0 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b  lly equals the k
1f2b0 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a  ey, or.** else j
1f2c0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
1f2d0 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65  to P2.  When the
1f2e0 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41   cursor is OPFLA
1f2f0 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a  G_SEEKEQ, this.*
1f300 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65  * opcode must be
1f310 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
1f320 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 74  IdxGE opcode wit
1f330 68 20 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d  h the same argum
1f340 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78  ents..** The Idx
1f350 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  GE opcode will b
1f360 65 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 69  e skipped if thi
1f370 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64  s opcode succeed
1f380 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64  s, but the.** Id
1f390 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  xGE opcode will 
1f3a0 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65  be used on subse
1f3b0 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61  quent loop itera
1f3c0 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  tions..**.** See
1f3d0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1f3e0 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20  tFound, SeekGt, 
1f3f0 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a  SeekGe, SeekLt.*
1f400 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54  /.case OP_SeekLT
1f410 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1f420 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1f430 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20  P_SeekLE:       
1f440 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1f450 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45  /.case OP_SeekGE
1f460 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1f470 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1f480 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20  P_SeekGT: {     
1f490 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1f4a0 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
1f4b0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72         /* Compar
1f4c0 69 73 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20  ison result */. 
1f4d0 20 69 6e 74 20 6f 63 3b 20 20 20 20 20 20 20 20   int oc;        
1f4e0 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f      /* Opcode */
1f4f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f500 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72  C;    /* The cur
1f510 73 6f 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20  sor to seek */. 
1f520 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1f530 72 3b 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74  r;  /* The key t
1f540 6f 20 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20  o seek for */.  
1f550 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
1f560 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f570 63 6f 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64  columns or field
1f580 73 20 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a  s in the key */.
1f590 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20    i64 iKey;     
1f5a0 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69       /* The rowi
1f5b0 64 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b  d we are to seek
1f5c0 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f   to */.  int eqO
1f5d0 6e 6c 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  nly;        /* O
1f5e0 6e 6c 79 20 69 6e 74 65 72 65 73 74 65 64 20 69  nly interested i
1f5f0 6e 20 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a  n == results */.
1f600 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1f610 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1f620 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1f630 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1f640 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  !=0 );.  pC = p-
1f650 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1f660 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1f670 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1f680 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
1f690 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
1f6a0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45  ssert( OP_SeekLE
1f6b0 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20   == OP_SeekLT+1 
1f6c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1f6d0 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65  SeekGE == OP_See
1f6e0 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72  kLT+2 );.  asser
1f6f0 74 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20  t( OP_SeekGT == 
1f700 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20  OP_SeekLT+3 );. 
1f710 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f   assert( pC->isO
1f720 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65  rdered );.  asse
1f730 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
1f740 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20  or!=0 );.  oc = 
1f750 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65  pOp->opcode;.  e
1f760 71 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d  qOnly = 0;.  pC-
1f770 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69  >nullRow = 0;.#i
1f780 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1f790 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
1f7a0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65   pOp->opcode;.#e
1f7b0 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e  ndif..  if( pC->
1f7c0 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f  isTable ){.    /
1f7d0 2a 20 54 68 65 20 42 54 52 45 45 5f 53 45 45 4b  * The BTREE_SEEK
1f7e0 5f 45 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79  _EQ flag is only
1f7f0 20 73 65 74 20 6f 6e 20 69 6e 64 65 78 20 63 75   set on index cu
1f800 72 73 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73 73  rsors */.    ass
1f810 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
1f820 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70  eCursorHasHint(p
1f830 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42  C->uc.pCursor, B
1f840 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30  TREE_SEEK_EQ)==0
1f850 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20   );..    /* The 
1f860 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50  input value in P
1f870 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e  3 might be of an
1f880 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c  y type: integer,
1f890 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20   real, string,. 
1f8a0 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e     ** blob, or N
1f8b0 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65  ULL.  But it nee
1f8c0 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  ds to be an inte
1f8d0 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61  ger before we ca
1f8e0 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20  n do.    ** the 
1f8f0 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74  seek, so convert
1f900 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33   it. */.    pIn3
1f910 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1f920 5d 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33  ];.    if( (pIn3
1f930 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
1f940 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
1f950 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  Str))==MEM_Str )
1f960 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d  {.      applyNum
1f970 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
1f980 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20  3, 0);.    }.   
1f990 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
1f9a0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
1f9b0 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  );..    /* If th
1f9c0 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64  e P3 value could
1f9d0 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65   not be converte
1f9e0 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
1f9f0 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a  r without.    **
1fa00 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
1fa10 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69  tion, then speci
1fa20 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  al processing is
1fa30 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a   required... */.
1fa40 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1fa50 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
1fa60 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
1fa70 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1fa80 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Real)==0 ){. 
1fa90 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
1faa0 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74   P3 value cannot
1fab0 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
1fac0 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61  to any kind of a
1fad0 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20   number,.       
1fae0 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65   ** then the see
1faf0 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  k is not possibl
1fb00 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32  e, so jump to P2
1fb10 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65   */.        Vdbe
1fb20 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29  BranchTaken(1,2)
1fb30 3b 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ; goto jump_to_p
1fb40 32 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  2;.        break
1fb50 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
1fb60 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f   /* If the appro
1fb70 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73  ximation iKey is
1fb80 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65   larger than the
1fb90 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61   actual real sea
1fba0 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72  rch.      ** ter
1fbb0 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d  m, substitute >=
1fbc0 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72   for > and < for
1fbd0 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65   <=. e.g. if the
1fbe0 20 73 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20   search term.   
1fbf0 20 20 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64     ** is 4.9 and
1fc00 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 70 70   the integer app
1fc10 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20  roximation 5:.  
1fc20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
1fc30 20 20 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39         (x >  4.9
1fc40 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e  )    ->     (x >
1fc50 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20  = 5).      **   
1fc60 20 20 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20       (x <= 4.9) 
1fc70 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20     ->     (x <  
1fc80 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  5).      */.    
1fc90 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c    if( pIn3->u.r<
1fca0 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a  (double)iKey ){.
1fcb0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1fcc0 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53  OP_SeekGE==(OP_S
1fcd0 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20  eekGT-1) );.    
1fce0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
1fcf0 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c  eekLT==(OP_SeekL
1fd00 45 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  E-1) );.        
1fd10 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b  assert( (OP_Seek
1fd20 4c 45 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  LE & 0x0001)==(O
1fd30 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30  P_SeekGT & 0x000
1fd40 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  1) );.        if
1fd50 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d  ( (oc & 0x0001)=
1fd60 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78  =(OP_SeekGT & 0x
1fd70 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20  0001) ) oc--;.  
1fd80 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
1fd90 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  If the approxima
1fda0 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61  tion iKey is sma
1fdb0 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61 63  ller than the ac
1fdc0 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68  tual real search
1fdd0 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20  .      ** term, 
1fde0 73 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f  substitute <= fo
1fdf0 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d  r < and > for >=
1fe00 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65  .  */.      else
1fe10 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28   if( pIn3->u.r>(
1fe20 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20  double)iKey ){. 
1fe30 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
1fe40 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65  P_SeekLE==(OP_Se
1fe50 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20  ekLT+1) );.     
1fe60 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1fe70 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45  ekGT==(OP_SeekGE
1fe80 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  +1) );.        a
1fe90 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c  ssert( (OP_SeekL
1fea0 54 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  T & 0x0001)==(OP
1feb0 5f 53 65 65 6b 47 45 20 26 20 30 78 30 30 30 31  _SeekGE & 0x0001
1fec0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ) );.        if(
1fed0 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d   (oc & 0x0001)==
1fee0 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30  (OP_SeekLT & 0x0
1fef0 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20  001) ) oc++;.   
1ff00 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20     }.    } .    
1ff10 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1ff20 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1ff30 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
1ff40 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c  0, (u64)iKey, 0,
1ff50 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
1ff60 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69  movetoTarget = i
1ff70 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79  Key;  /* Used by
1ff80 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20   OP_Delete */.  
1ff90 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1ffa0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
1ffb0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1ffc0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  rror;.    }.  }e
1ffd0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20  lse{.    /* For 
1ffe0 61 20 63 75 72 73 6f 72 20 77 69 74 68 20 74 68  a cursor with th
1fff0 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20  e BTREE_SEEK_EQ 
20000 68 69 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 4f  hint, only the O
20010 50 5f 53 65 65 6b 47 45 20 61 6e 64 0a 20 20 20  P_SeekGE and.   
20020 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70   ** OP_SeekLE op
20030 63 6f 64 65 73 20 61 72 65 20 61 6c 6c 6f 77 65  codes are allowe
20040 64 2c 20 61 6e 64 20 74 68 65 73 65 20 6d 75 73  d, and these mus
20050 74 20 62 65 20 69 6d 6d 65 64 69 61 74 65 6c 79  t be immediately
20060 20 66 6f 6c 6c 6f 77 65 64 0a 20 20 20 20 2a 2a   followed.    **
20070 20 62 79 20 61 6e 20 4f 50 5f 49 64 78 47 54 20   by an OP_IdxGT 
20080 6f 72 20 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f  or OP_IdxLT opco
20090 64 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  de, respectively
200a0 2c 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  , with the same 
200b0 6b 65 79 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  key..    */.    
200c0 69 66 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  if( sqlite3Btree
200d0 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43  CursorHasHint(pC
200e0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54  ->uc.pCursor, BT
200f0 52 45 45 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a  REE_SEEK_EQ) ){.
20100 20 20 20 20 20 20 65 71 4f 6e 6c 79 20 3d 20 31        eqOnly = 1
20110 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
20120 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
20130 53 65 65 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f  SeekGE || pOp->o
20140 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45  pcode==OP_SeekLE
20150 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
20160 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d  ( pOp[1].opcode=
20170 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70  =OP_IdxLT || pOp
20180 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [1].opcode==OP_I
20190 64 78 47 54 20 29 3b 0a 20 20 20 20 20 20 61 73  dxGT );.      as
201a0 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 31 3d  sert( pOp[1].p1=
201b0 3d 70 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a 20 20  =pOp[0].p1 );.  
201c0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
201d0 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32  1].p2==pOp[0].p2
201e0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
201f0 28 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70  ( pOp[1].p3==pOp
20200 5b 30 5d 2e 70 33 20 29 3b 0a 20 20 20 20 20 20  [0].p3 );.      
20210 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
20220 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69  4.i==pOp[0].p4.i
20230 20 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6e   );.    }..    n
20240 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e  Field = pOp->p4.
20250 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  i;.    assert( p
20260 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
20270 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65  NT32 );.    asse
20280 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a  rt( nField>0 );.
20290 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
202a0 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
202b0 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
202c0 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20  16)nField;..    
202d0 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65  /* The next line
202e0 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65   of code compute
202f0 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e  s as follows, on
20300 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a  ly faster:.    *
20310 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53  *   if( oc==OP_S
20320 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGT || oc==OP_
20330 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a  SeekLE ){.    **
20340 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72       r.default_r
20350 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20  c = -1;.    **  
20360 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20   }else{.    **  
20370 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
20380 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d  = +1;.    **   }
20390 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65  .    */.    r.de
203a0 66 61 75 6c 74 5f 72 63 20 3d 20 28 28 31 20 26  fault_rc = ((1 &
203b0 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54   (oc - OP_SeekLT
203c0 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20  )) ? -1 : +1);. 
203d0 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
203e0 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65  P_SeekGT || r.de
203f0 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a  fault_rc==-1 );.
20400 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
20410 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64  OP_SeekLE || r.d
20420 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b  efault_rc==-1 );
20430 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
20440 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e  =OP_SeekGE || r.
20450 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29  default_rc==+1 )
20460 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
20470 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72  !=OP_SeekLT || r
20480 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20  .default_rc==+1 
20490 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d  );..    r.aMem =
204a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
204b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
204c0 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69  EBUG.    { int i
204d0 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
204e0 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
204f0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
20500 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
20510 23 65 6e 64 69 66 0a 20 20 20 20 72 2e 65 71 53  #endif.    r.eqS
20520 65 65 6e 20 3d 20 30 3b 0a 20 20 20 20 72 63 20  een = 0;.    rc 
20530 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
20540 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
20550 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 2c  >uc.pCursor, &r,
20560 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
20570 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
20580 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
20590 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
205a0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
205b0 69 66 28 20 65 71 4f 6e 6c 79 20 26 26 20 72 2e  if( eqOnly && r.
205c0 65 71 53 65 65 6e 3d 3d 30 20 29 7b 0a 20 20 20  eqSeen==0 ){.   
205d0 20 20 20 61 73 73 65 72 74 28 20 72 65 73 21 3d     assert( res!=
205e0 30 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  0 );.      goto 
205f0 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a  seek_not_found;.
20600 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e      }.  }.  pC->
20610 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
20620 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
20630 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
20640 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ALE;.#ifdef SQLI
20650 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65  TE_TEST.  sqlite
20660 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b  3_search_count++
20670 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 6f  ;.#endif.  if( o
20680 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20  c>=OP_SeekGE ){ 
20690 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
206a0 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGE || oc==OP
206b0 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20 20 20 69  _SeekGT );.    i
206c0 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73  f( res<0 || (res
206d0 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
206e0 65 6b 47 54 29 20 29 7b 0a 20 20 20 20 20 20 72  ekGT) ){.      r
206f0 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  es = 0;.      rc
20700 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   = sqlite3BtreeN
20710 65 78 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ext(pC->uc.pCurs
20720 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
20730 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
20740 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
20750 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
20760 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
20770 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  es = 0;.    }.  
20780 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
20790 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54  t( oc==OP_SeekLT
207a0 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
207b0 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  E );.    if( res
207c0 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  >0 || (res==0 &&
207d0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20   oc==OP_SeekLT) 
207e0 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
207f0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
20800 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
20810 73 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  s(pC->uc.pCursor
20820 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
20830 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
20840 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
20850 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
20860 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
20870 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67  res might be neg
20880 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68  ative because th
20890 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79  e table is empty
208a0 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20  .  Check to.    
208b0 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73    ** see if this
208c0 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20   is the case..  
208d0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73      */.      res
208e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45   = sqlite3BtreeE
208f0 6f 66 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  of(pC->uc.pCurso
20900 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 73 65  r);.    }.  }.se
20910 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20  ek_not_found:.  
20920 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
20930 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  0 );.  VdbeBranc
20940 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
20950 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20  ;.  if( res ){. 
20960 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
20970 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  p2;.  }else if( 
20980 65 71 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 61 73  eqOnly ){.    as
20990 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63  sert( pOp[1].opc
209a0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c  ode==OP_IdxLT ||
209b0 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
209c0 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20  OP_IdxGT );.    
209d0 70 4f 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20 74  pOp++; /* Skip t
209e0 68 65 20 4f 50 5f 49 64 78 4c 74 20 6f 72 20 4f  he OP_IdxLt or O
209f0 50 5f 49 64 78 47 54 20 74 68 61 74 20 66 6f 6c  P_IdxGT that fol
20a00 6c 6f 77 73 20 2a 2f 0a 20 20 7d 0a 20 20 62 72  lows */.  }.  br
20a10 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
20a20 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50  e: Found P1 P2 P
20a30 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
20a40 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
20a50 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
20a60 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
20a70 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
20a80 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
20a90 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
20aa0 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
20ab0 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
20ac0 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
20ad0 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
20ae0 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
20af0 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  rd..**.** Cursor
20b00 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
20b10 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
20b20 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
20b30 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
20b40 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20  .** is a prefix 
20b50 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
20b60 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
20b70 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64  s made to P2 and
20b80 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70  .** P1 is left p
20b90 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d  ointing at the m
20ba0 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
20bb0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
20bc0 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
20bd0 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
20be0 20 77 68 65 72 65 20 69 74 20 63 61 6e 20 62 65   where it can be
20bf0 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20  .** advanced in 
20c00 74 68 65 20 66 6f 72 77 61 72 64 20 64 69 72 65  the forward dire
20c10 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74  ction.  The Next
20c20 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c   instruction wil
20c30 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e  l work,.** but n
20c40 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e 73 74  ot the Prev inst
20c50 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  ruction..**.** S
20c60 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e  ee also: NotFoun
20c70 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e  d, NoConflict, N
20c80 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47 65  otExists. SeekGe
20c90 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
20ca0 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  otFound P1 P2 P3
20cb0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
20cc0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
20cd0 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
20ce0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
20cf0 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
20d00 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
20d10 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
20d20 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
20d30 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
20d40 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
20d50 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
20d60 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
20d70 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72  d..** .** Cursor
20d80 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
20d90 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
20da0 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
20db0 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
20dc0 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70  .** is not the p
20dd0 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74  refix of any ent
20de0 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20  ry in P1 then a 
20df0 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
20e00 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64  P2.  If P1 .** d
20e10 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65  oes contain an e
20e20 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66 69  ntry whose prefi
20e30 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50 33  x matches the P3
20e40 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20  /P4 record then 
20e50 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73  control.** falls
20e60 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
20e70 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
20e80 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20   and P1 is left 
20e90 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a  pointing at the.
20ea0 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  ** matching entr
20eb0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  y..**.** This op
20ec0 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74  eration leaves t
20ed0 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
20ee0 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
20ef0 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e  nnot be.** advan
20f00 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69  ced in either di
20f10 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rection.  In oth
20f20 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65  er words, the Ne
20f30 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f  xt and Prev.** o
20f40 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f  pcodes do not wo
20f50 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70  rk after this op
20f60 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  eration..**.** S
20f70 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
20f80 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e  NotExists, NoCon
20f90 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  flict.*/./* Opco
20fa0 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50  de: NoConflict P
20fb0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
20fc0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
20fd0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
20fe0 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
20ff0 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
21000 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
21010 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
21020 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
21030 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
21040 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
21050 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
21060 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
21070 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
21080 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
21090 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
210a0 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
210b0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
210c0 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61   and P4.** conta
210d0 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c  ins any NULL val
210e0 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ue, jump immedia
210f0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
21100 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65  all terms of the
21110 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e  .** record are n
21120 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63  ot-NULL then a c
21130 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20  heck is done to 
21140 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79  determine if any
21150 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50   row in the.** P
21160 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68 61  1 index btree ha
21170 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79  s a matching key
21180 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68 65   prefix.  If the
21190 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65  re are no matche
211a0 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64  s, jump.** immed
211b0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
211c0 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61 74  f there is a mat
211d0 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ch, fall through
211e0 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50   and leave the P
211f0 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e  1.** cursor poin
21200 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63  ting to the matc
21210 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20  hing row..**.** 
21220 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73  This opcode is s
21230 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74  imilar to OP_Not
21240 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20 65  Found with the e
21250 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74  xceptions that t
21260 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20  he.** branch is 
21270 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20  always taken if 
21280 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65 20  any part of the 
21290 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74  search key input
212a0 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   is NULL..**.** 
212b0 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
212c0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
212d0 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
212e0 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a  e it cannot be.*
212f0 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69  * advanced in ei
21300 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
21310 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
21320 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
21330 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f  ev.** opcodes do
21340 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20   not work after 
21350 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  this operation..
21360 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
21370 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c  NotFound, Found,
21380 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61   NotExists.*/.ca
21390 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  se OP_NoConflict
213a0 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69  :     /* jump, i
213b0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  n3 */.case OP_No
213c0 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a  tFound:       /*
213d0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
213e0 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20  se OP_Found: {  
213f0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
21400 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65  n3 */.  int alre
21410 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74  adyExists;.  int
21420 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e 74   takeJump;.  int
21430 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f   ii;.  VdbeCurso
21440 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
21450 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65 3b  ;.  char *pFree;
21460 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
21470 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e  d *pIdxKey;.  Un
21480 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
21490 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b    char aTempRec[
214a0 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e  ROUND8(sizeof(Un
214b0 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b  packedRecord)) +
214c0 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b   sizeof(Mem)*4 +
214d0 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   7];..#ifdef SQL
214e0 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70  ITE_TEST.  if( p
214f0 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
21500 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69  oConflict ) sqli
21510 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b  te3_found_count+
21520 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73  +;.#endif..  ass
21530 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
21540 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
21550 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
21560 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
21570 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43  P4_INT32 );.  pC
21580 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
21590 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
215a0 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20  pC!=0 );.#ifdef 
215b0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
215c0 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d  C->seekOp = pOp-
215d0 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a  >opcode;.#endif.
215e0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
215f0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
21600 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
21610 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
21620 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21630 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
21640 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
21650 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 70  sTable==0 );.  p
21660 46 72 65 65 20 3d 20 30 3b 0a 20 20 69 66 28 20  Free = 0;.  if( 
21670 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20  pOp->p4.i>0 ){. 
21680 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
21690 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
216a0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
216b0 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
216c0 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a   r.aMem = pIn3;.
216d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
216e0 42 55 47 0a 20 20 20 20 66 6f 72 28 69 69 3d 30  BUG.    for(ii=0
216f0 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  ; ii<r.nField; i
21700 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65  i++){.      asse
21710 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
21720 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20  r.aMem[ii]) );. 
21730 20 20 20 20 20 61 73 73 65 72 74 28 20 28 72 2e       assert( (r.
21740 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26  aMem[ii].flags &
21750 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c   MEM_Zero)==0 ||
21760 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30   r.aMem[ii].n==0
21770 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 69   );.      if( ii
21780 20 29 20 52 45 47 49 53 54 45 52 5f 54 52 41 43   ) REGISTER_TRAC
21790 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72  E(pOp->p3+ii, &r
217a0 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20 20 20  .aMem[ii]);.    
217b0 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49 64  }.#endif.    pId
217c0 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c  xKey = &r;.  }el
217d0 73 65 7b 0a 20 20 20 20 70 49 64 78 4b 65 79 20  se{.    pIdxKey 
217e0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c  = sqlite3VdbeAll
217f0 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  ocUnpackedRecord
21800 28 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 4b  (.        pC->pK
21810 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63  eyInfo, aTempRec
21820 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65  , sizeof(aTempRe
21830 63 29 2c 20 26 70 46 72 65 65 0a 20 20 20 20 29  c), &pFree.    )
21840 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65  ;.    if( pIdxKe
21850 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  y==0 ) goto no_m
21860 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
21870 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
21880 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 28 76  M_Blob );.    (v
21890 6f 69 64 29 45 78 70 61 6e 64 42 6c 6f 62 28 70  oid)ExpandBlob(p
218a0 49 6e 33 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  In3);.    sqlite
218b0 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63  3VdbeRecordUnpac
218c0 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20  k(pC->pKeyInfo, 
218d0 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a  pIn3->n, pIn3->z
218e0 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a  , pIdxKey);.  }.
218f0 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75    pIdxKey->defau
21900 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b  lt_rc = 0;.  tak
21910 65 4a 75 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28  eJump = 0;.  if(
21920 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
21930 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20  _NoConflict ){. 
21940 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50     /* For the OP
21950 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f  _NoConflict opco
21960 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  de, take the jum
21970 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a  p if any of the.
21980 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65      ** input fie
21990 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69  lds are NULL, si
219a0 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68  nce any key with
219b0 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74   a NULL will not
219c0 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74  .    ** conflict
219d0 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30   */.    for(ii=0
219e0 3b 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46  ; ii<pIdxKey->nF
219f0 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  ield; ii++){.   
21a00 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 2d 3e     if( pIdxKey->
21a10 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26  aMem[ii].flags &
21a20 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
21a30 20 20 20 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20       takeJump = 
21a40 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  1;.        break
21a50 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
21a60 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
21a70 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
21a80 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
21a90 72 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30  rsor, pIdxKey, 0
21aa0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 73 71  , 0, &res);.  sq
21ab0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
21ac0 70 46 72 65 65 29 3b 0a 20 20 69 66 28 20 72 63  pFree);.  if( rc
21ad0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
21ae0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
21af0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
21b00 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
21b10 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65 61 64   = res;.  alread
21b20 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d  yExists = (res==
21b30 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  0);.  pC->nullRo
21b40 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45 78 69  w = 1-alreadyExi
21b50 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  sts;.  pC->defer
21b60 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
21b70 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
21b80 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
21b90 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
21ba0 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20  e==OP_Found ){. 
21bb0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
21bc0 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74 73  en(alreadyExists
21bd0 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
21be0 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
21bf0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
21c00 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
21c10 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 74 61  beBranchTaken(ta
21c20 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65 61 64 79 45  keJump||alreadyE
21c30 78 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20  xists==0,2);.   
21c40 20 69 66 28 20 74 61 6b 65 4a 75 6d 70 20 7c 7c   if( takeJump ||
21c50 20 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20   !alreadyExists 
21c60 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
21c70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
21c80 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
21c90 65 6b 52 6f 77 69 64 20 50 31 20 50 32 20 50 33  ekRowid P1 P2 P3
21ca0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
21cb0 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a  : intkey=r[P3].*
21cc0 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
21cd0 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72  ndex of a cursor
21ce0 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20   open on an SQL 
21cf0 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74  table btree (wit
21d00 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79  h integer.** key
21d10 73 29 2e 20 20 49 66 20 72 65 67 69 73 74 65 72  s).  If register
21d20 20 50 33 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e   P3 does not con
21d30 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 20  tain an integer 
21d40 6f 72 20 69 66 20 50 31 20 64 6f 65 73 20 6e 6f  or if P1 does no
21d50 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e 20 61 20 72  t.** contain a r
21d60 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64  ecord with rowid
21d70 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d   P3 then jump im
21d80 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
21d90 20 20 0a 2a 2a 20 4f 72 2c 20 69 66 20 50 32 20    .** Or, if P2 
21da0 69 73 20 30 2c 20 72 61 69 73 65 20 61 6e 20 53  is 0, raise an S
21db0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
21dc0 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20  ror. If P1 does 
21dd0 63 6f 6e 74 61 69 6e 0a 2a 2a 20 61 20 72 65 63  contain.** a rec
21de0 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50  ord with rowid P
21df0 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65  3 then .** leave
21e00 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   the cursor poin
21e10 74 69 6e 67 20 61 74 20 74 68 61 74 20 72 65 63  ting at that rec
21e20 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  ord and fall thr
21e30 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
21e40 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
21e50 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f  .**.** The OP_No
21e60 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65 20 70  tExists opcode p
21e70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65  erforms the same
21e80 20 6f 70 65 72 61 74 69 6f 6e 2c 20 62 75 74 20   operation, but 
21e90 77 69 74 68 20 4f 50 5f 4e 6f 74 45 78 69 73 74  with OP_NotExist
21ea0 73 0a 2a 2a 20 74 68 65 20 50 33 20 72 65 67 69  s.** the P3 regi
21eb0 73 74 65 72 20 6d 75 73 74 20 62 65 20 67 75 61  ster must be gua
21ec0 72 61 6e 74 65 65 64 20 74 6f 20 63 6f 6e 74 61  ranteed to conta
21ed0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  in an integer va
21ee0 6c 75 65 2e 20 20 57 69 74 68 20 74 68 69 73 0a  lue.  With this.
21ef0 2a 2a 20 6f 70 63 6f 64 65 2c 20 72 65 67 69 73  ** opcode, regis
21f00 74 65 72 20 50 33 20 6d 69 67 68 74 20 6e 6f 74  ter P3 might not
21f10 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
21f20 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ger..**.** The O
21f30 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64  P_NotFound opcod
21f40 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
21f50 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e  ame operation on
21f60 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a   index btrees.**
21f70 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79   (with arbitrary
21f80 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79   multi-value key
21f90 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  s)..**.** This o
21fa0 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
21fb0 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
21fc0 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
21fd0 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a  ot be advanced.*
21fe0 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  * in either dire
21ff0 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
22000 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
22010 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65   and Prev opcode
22020 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f  s will.** not wo
22030 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69  rk following thi
22040 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
22050 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
22060 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
22070 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64  flict, SeekRowid
22080 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
22090 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50  otExists P1 P2 P
220a0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
220b0 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a  s: intkey=r[P3].
220c0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
220d0 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f  index of a curso
220e0 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c  r open on an SQL
220f0 20 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69   table btree (wi
22100 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65  th integer.** ke
22110 79 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69  ys).  P3 is an i
22120 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49  nteger rowid.  I
22130 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f  f P1 does not co
22140 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77  ntain a record w
22150 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20  ith.** rowid P3 
22160 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
22170 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72  ately to P2.  Or
22180 2c 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61  , if P2 is 0, ra
22190 69 73 65 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ise an.** SQLITE
221a0 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20  _CORRUPT error. 
221b0 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61  If P1 does conta
221c0 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  in a record with
221d0 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a   rowid P3 then .
221e0 2a 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72  ** leave the cur
221f0 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  sor pointing at 
22200 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20  that record and 
22210 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
22220 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74  the next.** inst
22230 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
22240 68 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20  he OP_SeekRowid 
22250 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
22260 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
22270 6f 6e 20 62 75 74 20 61 6c 73 6f 20 61 6c 6c 6f  on but also allo
22280 77 73 20 74 68 65 0a 2a 2a 20 50 33 20 72 65 67  ws the.** P3 reg
22290 69 73 74 65 72 20 74 6f 20 63 6f 6e 74 61 69 6e  ister to contain
222a0 20 61 20 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 76   a non-integer v
222b0 61 6c 75 65 2c 20 69 6e 20 77 68 69 63 68 20 63  alue, in which c
222c0 61 73 65 20 74 68 65 20 6a 75 6d 70 20 69 73 0a  ase the jump is.
222d0 2a 2a 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 2e  ** always taken.
222e0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65    This opcode re
222f0 71 75 69 72 65 73 20 74 68 61 74 20 50 33 20 61  quires that P3 a
22300 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e 20 61 6e  lways contain an
22310 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
22320 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  The OP_NotFound 
22330 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
22340 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
22350 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65  on on index btre
22360 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69  es.** (with arbi
22370 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75  trary multi-valu
22380 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54  e keys)..**.** T
22390 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
223a0 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
223b0 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
223c0 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e   cannot be advan
223d0 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72  ced.** in either
223e0 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
223f0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
22400 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f   Next and Prev o
22410 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e  pcodes will.** n
22420 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e  ot work followin
22430 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
22440 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
22450 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
22460 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b  NoConflict, Seek
22470 52 6f 77 69 64 0a 2a 2f 0a 63 61 73 65 20 4f 50  Rowid.*/.case OP
22480 5f 53 65 65 6b 52 6f 77 69 64 3a 20 7b 20 20 20  _SeekRowid: {   
22490 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
224a0 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  3 */.  VdbeCurso
224b0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
224c0 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
224d0 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b  res;.  u64 iKey;
224e0 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ..  pIn3 = &aMem
224f0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
22500 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
22510 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
22520 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
22530 28 70 49 6e 33 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn3, SQLITE_AF
22540 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64  F_NUMERIC, encod
22550 69 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 28 70  ing);.    if( (p
22560 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
22570 5f 49 6e 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  _Int)==0 ) goto 
22580 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
22590 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
225a0 68 20 69 6e 74 6f 20 4f 50 5f 4e 6f 74 45 78 69  h into OP_NotExi
225b0 73 74 73 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  sts */.case OP_N
225c0 6f 74 45 78 69 73 74 73 3a 20 20 20 20 20 20 20  otExists:       
225d0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
225e0 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  */.  pIn3 = &aMe
225f0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
22600 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
22610 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
22620 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22630 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
22640 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
22650 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
22660 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
22670 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66   pC!=0 );.#ifdef
22680 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
22690 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a  pC->seekOp = 0;.
226a0 23 65 6e 64 69 66 0a 20 20 61 73 73 65 72 74 28  #endif.  assert(
226b0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
226c0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
226d0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
226e0 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72  BTREE );.  pCrsr
226f0 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
22700 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
22710 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d  sr!=0 );.  res =
22720 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e   0;.  iKey = pIn
22730 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73  3->u.i;.  rc = s
22740 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
22750 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
22760 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65   0, iKey, 0, &re
22770 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  s);.  assert( rc
22780 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
22790 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6d  es==0 );.  pC->m
227a0 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b  ovetoTarget = iK
227b0 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20  ey;  /* Used by 
227c0 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 70  OP_Delete */.  p
227d0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
227e0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
227f0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
22800 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
22810 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62  oveto = 0;.  Vdb
22820 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
22830 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d 3e 73 65  !=0,2);.  pC->se
22840 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a  ekResult = res;.
22850 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a    if( res!=0 ){.
22860 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
22870 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20  SQLITE_OK );.   
22880 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
22890 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
228a0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
228b0 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  T;.    }else{.  
228c0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
228d0 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  _p2;.    }.  }. 
228e0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
228f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
22900 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
22910 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e  * Opcode: Sequen
22920 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ce P1 P2 * * *.*
22930 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
22940 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72  ]=cursor[P1].ctr
22950 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68  ++.**.** Find th
22960 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65  e next available
22970 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
22980 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
22990 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73 65 71  ** Write the seq
229a0 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74  uence number int
229b0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
229c0 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e  * The sequence n
229d0 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72  umber on the cur
229e0 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  sor is increment
229f0 65 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a  ed after this.**
22a00 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a   instruction.  .
22a10 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65  */.case OP_Seque
22a20 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nce: {          
22a30 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73   /* out2 */.  as
22a40 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
22a50 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
22a60 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
22a70 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  rt( p->apCsr[pOp
22a80 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 61 73  ->p1]!=0 );.  as
22a90 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
22aa0 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70  Op->p1]->eCurTyp
22ab0 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20  e!=CURTYPE_VTAB 
22ac0 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
22ad0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
22ae0 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  p);.  pOut->u.i 
22af0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
22b00 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b  p1]->seqCount++;
22b10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
22b20 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69   Opcode: NewRowi
22b30 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
22b40 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
22b50 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65  ]=rowid.**.** Ge
22b60 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20  t a new integer 
22b70 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61  record number (a
22b80 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73  .k.a "rowid") us
22b90 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f  ed as the key to
22ba0 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65   a table..** The
22bb0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
22bc0 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
22bd0 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20 69   used as a key i
22be0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
22bf0 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75 72  * table that cur
22c00 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
22c10 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  .  The new recor
22c20 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74  d number is writ
22c30 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74  ten.** written t
22c40 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
22c50 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65  *.** If P3>0 the
22c60 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73 74  n P3 is a regist
22c70 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66  er in the root f
22c80 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42  rame of this VDB
22c90 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a  E that holds .**
22ca0 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72 65   the largest pre
22cb0 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65  viously generate
22cc0 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
22cd0 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e   No new record n
22ce0 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c  umbers are.** al
22cf0 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73  lowed to be less
22d00 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65   than this value
22d10 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75  . When this valu
22d20 65 20 72 65 61 63 68 65 73 20 69 74 73 20 6d 61  e reaches its ma
22d30 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51  ximum, .** an SQ
22d40 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20  LITE_FULL error 
22d50 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68  is generated. Th
22d60 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69 73  e P3 register is
22d70 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
22d80 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64  e '.** generated
22d90 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
22da0 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73  This P3 mechanis
22db0 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c  m is used to hel
22dc0 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  p implement the.
22dd0 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ** AUTOINCREMENT
22de0 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73   feature..*/.cas
22df0 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b  e OP_NewRowid: {
22e00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
22e10 74 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20  t2 */.  i64 v;  
22e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22e30 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20  * The new rowid 
22e40 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
22e50 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43  *pC;        /* C
22e60 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74  ursor of table t
22e70 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f  o get the new ro
22e80 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  wid */.  int res
22e90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22ea0 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20  /* Result of an 
22eb0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
22ec0 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  () */.  int cnt;
22ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22ee0 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d  * Counter to lim
22ef0 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  it the number of
22f00 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d   searches */.  M
22f10 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
22f20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
22f30 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73  r holding larges
22f40 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f  t rowid for AUTO
22f50 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56  INCREMENT */.  V
22f60 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
22f70 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72  ;     /* Root fr
22f80 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a  ame of VDBE */..
22f90 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d    v = 0;.  res =
22fa0 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   0;.  pOut = out
22fb0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
22fc0 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
22fd0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
22fe0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
22ff0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
23000 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
23010 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
23020 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
23030 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
23040 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
23050 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
23060 72 21 3d 30 20 29 3b 0a 20 20 7b 0a 20 20 20 20  r!=0 );.  {.    
23070 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69  /* The next rowi
23080 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  d or record numb
23090 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65  er (different te
230a0 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65  rms for the same
230b0 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69  .    ** thing) i
230c0 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20  s obtained in a 
230d0 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74  two-step algorit
230e0 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  hm..    **.    *
230f0 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d  * First we attem
23100 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  pt to find the l
23110 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
23120 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e  rowid and add on
23130 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74  e.    ** to that
23140 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61  .  But if the la
23150 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
23160 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20  owid is already 
23170 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20  the maximum.    
23180 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ** positive inte
23190 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20  ger, we have to 
231a0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
231b0 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a  the second.    *
231c0 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20  * probabilistic 
231d0 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a  algorithm.    **
231e0 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f  .    ** The seco
231f0 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  nd algorithm is 
23200 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69  to select a rowi
23210 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
23220 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74  see if.    ** it
23230 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20   already exists 
23240 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
23250 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  f it does not ex
23260 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20  ist, we have.   
23270 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20   ** succeeded.  
23280 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f  If the random ro
23290 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  wid does exist, 
232a0 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20  we select a new 
232b0 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74  one.    ** and t
232c0 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20  ry again, up to 
232d0 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a  100 times..    *
232e0 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  /.    assert( pC
232f0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69  ->isTable );..#i
23300 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49  fdef SQLITE_32BI
23310 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69  T_ROWID.#   defi
23320 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37  ne MAX_ROWID 0x7
23330 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20  fffffff.#else.  
23340 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c    /* Some compil
23350 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f  ers complain abo
23360 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20  ut constants of 
23370 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66  the form 0x7ffff
23380 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20  fffffffffff..   
23390 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c   ** Others compl
233a0 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66  ain about 0x7fff
233b0 66 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e  fffffffffffffLL.
233c0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
233d0 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20  macro seems.    
233e0 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68  ** to provide th
233f0 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65  e constant while
23400 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70   making all comp
23410 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20  ilers happy..   
23420 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d   */.#   define M
23430 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28  AX_ROWID  (i64)(
23440 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66   (((u64)0x7fffff
23450 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29  ff)<<32) | (u64)
23460 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e  0xffffffff ).#en
23470 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43  dif..    if( !pC
23480 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
23490 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
234a0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
234b0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
234c0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
234d0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
234e0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
234f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23500 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
23510 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
23520 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20      v = 1;   /* 
23530 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30  IMP: R-61914-480
23540 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73  74 */.      }els
23550 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  e{.        asser
23560 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
23570 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d  ursorIsValid(pC-
23580 3e 75 63 2e 70 43 75 72 73 6f 72 29 20 29 3b 0a  >uc.pCursor) );.
23590 20 20 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69          v = sqli
235a0 74 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b  te3BtreeIntegerK
235b0 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ey(pC->uc.pCurso
235c0 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  r);.        if( 
235d0 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a  v>=MAX_ROWID ){.
235e0 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73            pC->us
235f0 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31  eRandomRowid = 1
23600 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
23610 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20  .          v++; 
23620 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33    /* IMP: R-2953
23630 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20  8-34987 */.     
23640 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
23650 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   }..#ifndef SQLI
23660 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
23670 45 4d 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f  EMENT.    if( pO
23680 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f  p->p3 ){.      /
23690 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
236a0 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
236b0 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
236c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
236d0 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  3>0 );.      if(
236e0 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
236f0 20 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65        for(pFrame
23700 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
23710 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72  me->pParent; pFr
23720 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
23730 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a  ent);.        /*
23740 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
23750 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
23760 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
23770 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
23780 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d  p3<=pFrame->nMem
23790 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d   );.        pMem
237a0 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
237b0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
237c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
237d0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
237e0 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
237f0 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
23800 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
23810 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
23820 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
23830 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d  ;.        pMem =
23840 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
23850 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  .        memAbou
23860 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65  tToChange(p, pMe
23870 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  m);.      }.    
23880 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
23890 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20  alid(pMem) );.. 
238a0 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
238b0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65  ACE(pOp->p3, pMe
238c0 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  m);.      sqlite
238d0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
238e0 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  fy(pMem);.      
238f0 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
23900 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
23910 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33  =0 );  /* mem(P3
23920 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  ) holds an integ
23930 65 72 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  er */.      if( 
23940 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52  pMem->u.i==MAX_R
23950 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52  OWID || pC->useR
23960 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
23970 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
23980 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50  E_FULL;   /* IMP
23990 3a 20 52 2d 31 37 38 31 37 2d 30 30 36 33 30 20  : R-17817-00630 
239a0 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  */.        goto 
239b0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
239c0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
239d0 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e    if( v<pMem->u.
239e0 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76  i+1 ){.        v
239f0 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31   = pMem->u.i + 1
23a00 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
23a10 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pMem->u.i = v;. 
23a20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
23a30 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f  if( pC->useRando
23a40 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
23a50 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  /* IMPLEMENTATIO
23a60 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31  N-OF: R-07677-41
23a70 38 38 31 20 49 66 20 74 68 65 20 6c 61 72 67 65  881 If the large
23a80 73 74 20 52 4f 57 49 44 20 69 73 20 65 71 75 61  st ROWID is equa
23a90 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a  l to the.      *
23aa0 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62  * largest possib
23ab0 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32 32 33  le integer (9223
23ac0 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29  372036854775807)
23ad0 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   then the databa
23ae0 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69  se.      ** engi
23af0 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e  ne starts pickin
23b00 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69  g positive candi
23b10 64 61 74 65 20 52 4f 57 49 44 73 20 61 74 20 72  date ROWIDs at r
23b20 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20  andom until.    
23b30 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e    ** it finds on
23b40 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72  e that is not pr
23b50 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a  eviously used. *
23b60 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
23b70 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f  pOp->p3==0 );  /
23b80 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69  * We cannot be i
23b90 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d  n random rowid m
23ba0 6f 64 65 20 69 66 20 74 68 69 73 20 69 73 0a 20  ode if this is. 
23bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bc0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61              ** a
23bd0 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  n AUTOINCREMENT 
23be0 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20  table. */.      
23bf0 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64  cnt = 0;.      d
23c00 6f 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  o{.        sqlit
23c10 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69  e3_randomness(si
23c20 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20  zeof(v), &v);.  
23c30 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
23c40 52 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20  ROWID>>1); v++; 
23c50 20 2f 2a 20 45 6e 73 75 72 65 20 74 68 61 74 20   /* Ensure that 
23c60 76 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  v is greater tha
23c70 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20  n zero */.      
23c80 7d 77 68 69 6c 65 28 20 20 28 28 72 63 20 3d 20  }while(  ((rc = 
23c90 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
23ca0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75  toUnpacked(pC->u
23cb0 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75  c.pCursor, 0, (u
23cc0 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20  64)v,.          
23cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cf0 20 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29         0, &res))
23d00 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20  ==SQLITE_OK).   
23d10 20 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73           && (res
23d20 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20  ==0).           
23d30 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29   && (++cnt<100))
23d40 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 29  ;.      if( rc )
23d50 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
23d60 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
23d70 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
23d80 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
23d90 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50  E_FULL;   /* IMP
23da0 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20  : R-38219-53002 
23db0 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  */.        goto 
23dc0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
23dd0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
23de0 20 20 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b    assert( v>0 );
23df0 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32    /* EV: R-40812
23e00 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a  -03570 */.    }.
23e10 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
23e20 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
23e30 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
23e40 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
23e50 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
23e60 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
23e70 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
23e80 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
23e90 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
23ea0 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d  tkey=r[P3] data=
23eb0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74  r[P2].**.** Writ
23ec0 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20  e an entry into 
23ed0 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72  the table of cur
23ee0 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65  sor P1.  A new e
23ef0 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74  ntry is.** creat
23f00 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74  ed if it doesn't
23f10 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f   already exist o
23f20 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61  r the data for a
23f30 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e  n existing.** en
23f40 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74  try is overwritt
23f50 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73  en.  The data is
23f60 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42   the value MEM_B
23f70 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lob stored in re
23f80 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  gister.** number
23f90 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20   P2. The key is 
23fa0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
23fb0 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d  er P3. The key m
23fc0 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f  ust.** be a MEM_
23fd0 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  Int..**.** If th
23fe0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
23ff0 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
24000 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
24010 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
24020 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
24030 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
24040 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
24050 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f  LASTROWID flag o
24060 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20  f P5 is set,.** 
24070 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74  then rowid is st
24080 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75  ored for subsequ
24090 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68  ent return by th
240a0 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73  e.** sqlite3_las
240b0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
240c0 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72   function (other
240d0 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64  wise it is unmod
240e0 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  ified)..**.** If
240f0 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
24100 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f  EEKRESULT flag o
24110 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
24120 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
24130 6d 69 67 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73  might.** run fas
24140 74 65 72 20 62 79 20 61 76 6f 69 64 69 6e 67 20  ter by avoiding 
24150 61 6e 20 75 6e 6e 65 63 65 73 73 61 72 79 20 73  an unnecessary s
24160 65 65 6b 20 6f 6e 20 63 75 72 73 6f 72 20 50 31  eek on cursor P1
24170 2e 20 20 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74  .  However,.** t
24180 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
24190 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6d 75 73  KRESULT flag mus
241a0 74 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66  t only be set if
241b0 20 74 68 65 72 65 20 68 61 76 65 20 62 65 65 6e   there have been
241c0 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65   no prior.** see
241d0 6b 73 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ks on the cursor
241e0 20 6f 72 20 69 66 20 74 68 65 20 6d 6f 73 74 20   or if the most 
241f0 72 65 63 65 6e 74 20 73 65 65 6b 20 75 73 65 64  recent seek used
24200 20 61 20 6b 65 79 20 65 71 75 61 6c 20 74 6f 20   a key equal to 
24210 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P3..**.** If the
24220 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
24230 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
24240 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  en this opcode i
24250 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20  s part of an.** 
24260 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e  UPDATE operation
24270 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69 66  .  Otherwise (if
24280 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65   the flag is cle
24290 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70  ar) then this op
242a0 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20  code.** is part 
242b0 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65  of an INSERT ope
242c0 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66  ration.  The dif
242d0 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20  ference is only 
242e0 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20  important to.** 
242f0 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e  the update hook.
24300 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72  .**.** Parameter
24310 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f   P4 may point to
24320 20 61 20 54 61 62 6c 65 20 73 74 72 75 63 74 75   a Table structu
24330 72 65 2c 20 6f 72 20 6d 61 79 20 62 65 20 4e 55  re, or may be NU
24340 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 0a 2a 2a  LL. If it is .**
24350 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
24360 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
24370 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65  (sqlite3.xUpdate
24380 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76  Callback) is inv
24390 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69  oked .** followi
243a0 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20  ng a successful 
243b0 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57  insert..**.** (W
243c0 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20  ARNING/TODO: If 
243d0 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63  P1 is a pseudo-c
243e0 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20  ursor and P2 is 
243f0 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61  dynamically.** a
24400 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f  llocated, then o
24410 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69  wnership of P2 i
24420 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f  s transferred to
24430 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73   the pseudo-curs
24440 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74  or.** and regist
24450 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70  er P2 becomes ep
24460 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65  hemeral.  If the
24470 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67   cursor is chang
24480 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  ed, the.** value
24490 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
244a0 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65  will then change
244b0 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69  .  Make sure thi
244c0 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61  s does not.** ca
244d0 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  use any problems
244e0 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  .).**.** This in
244f0 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77  struction only w
24500 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20  orks on tables. 
24510 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   The equivalent 
24520 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66  instruction.** f
24530 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50  or indices is OP
24540 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f  _IdxInsert..*/./
24550 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74  * Opcode: Insert
24560 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34 20  Int P1 P2 P3 P4 
24570 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
24580 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72  intkey=P3 data=r
24590 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P2].**.** This 
245a0 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
245b0 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63  ke OP_Insert exc
245c0 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79  ept that the key
245d0 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67   is the.** integ
245e0 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74  er value P3, not
245f0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
24600 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64  e integer stored
24610 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
24620 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  .*/.case OP_Inse
24630 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73  rt: .case OP_Ins
24640 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20  ertInt: {.  Mem 
24650 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *pData;       /*
24660 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
24670 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72  g data for the r
24680 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
24690 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rted */.  Mem *p
246a0 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  Key;        /* M
246b0 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
246c0 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63  key  for the rec
246d0 6f 72 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ord */.  VdbeCur
246e0 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75  sor *pC;   /* Cu
246f0 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e  rsor to table in
24700 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20  to which insert 
24710 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  is written */.  
24720 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20  int seekResult; 
24730 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70    /* Result of p
24740 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69  rior seek or 0 i
24750 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55  f no USESEEKRESU
24760 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e  LT flag */.  con
24770 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f  st char *zDb;  /
24780 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  * database name 
24790 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70  - used by the up
247a0 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54  date hook */.  T
247b0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
247c0 20 2f 2a 20 54 61 62 6c 65 20 73 74 72 75 63 74   /* Table struct
247d0 75 72 65 20 2d 20 75 73 65 64 20 62 79 20 75 70  ure - used by up
247e0 64 61 74 65 20 61 6e 64 20 70 72 65 2d 75 70 64  date and pre-upd
247f0 61 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 69  ate hooks */.  i
24800 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  nt op;          
24810 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75   /* Opcode for u
24820 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49  pdate hook: SQLI
24830 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c  TE_UPDATE or SQL
24840 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 20 20  ITE_INSERT */.  
24850 42 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 20  BtreePayload x; 
24860 20 20 2f 2a 20 50 61 79 6c 6f 61 64 20 74 6f 20    /* Payload to 
24870 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 0a  be inserted */..
24880 20 20 6f 70 20 3d 20 30 3b 0a 20 20 70 44 61 74    op = 0;.  pDat
24890 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  a = &aMem[pOp->p
248a0 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
248b0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
248c0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
248d0 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
248e0 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b  sValid(pData) );
248f0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
24900 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24910 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
24920 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
24930 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
24940 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
24950 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
24960 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
24970 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
24980 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
24990 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c  type==P4_TABLE |
249a0 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3e 3d 50  | pOp->p4type>=P
249b0 34 5f 53 54 41 54 49 43 20 29 3b 0a 20 20 52 45  4_STATIC );.  RE
249c0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
249d0 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20  ->p2, pData);.. 
249e0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
249f0 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20  ==OP_Insert ){. 
24a00 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b     pKey = &aMem[
24a10 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73  pOp->p3];.    as
24a20 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67  sert( pKey->flag
24a30 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
24a40 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
24a50 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20  Valid(pKey) );. 
24a60 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
24a70 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29  E(pOp->p3, pKey)
24a80 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70  ;.    x.nKey = p
24a90 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73  Key->u.i;.  }els
24aa0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
24ab0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
24ac0 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20  nsertInt );.    
24ad0 78 2e 6e 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33  x.nKey = pOp->p3
24ae0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70  ;.  }..  if( pOp
24af0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
24b00 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41 54 45  LE && HAS_UPDATE
24b10 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20  _HOOK(db) ){.   
24b20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
24b30 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65  able );.    asse
24b40 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
24b50 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  ;.    zDb = db->
24b60 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62  aDb[pC->iDb].zDb
24b70 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20  SName;.    pTab 
24b80 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a  = pOp->p4.pTab;.
24b90 20 20 20 20 61 73 73 65 72 74 28 20 48 61 73 52      assert( HasR
24ba0 6f 77 69 64 28 70 54 61 62 29 20 29 3b 0a 20 20  owid(pTab) );.  
24bb0 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35    op = ((pOp->p5
24bc0 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
24bd0 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44  TE) ? SQLITE_UPD
24be0 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53  ATE : SQLITE_INS
24bf0 45 52 54 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ERT);.  }else{. 
24c00 20 20 20 70 54 61 62 20 3d 20 30 3b 20 2f 2a 20     pTab = 0; /* 
24c10 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c  Not needed.  Sil
24c20 65 6e 63 65 20 61 20 63 6f 6d 69 6c 65 72 20 77  ence a comiler w
24c30 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 7a  arning. */.    z
24c40 44 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  Db = 0;  /* Not 
24c50 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65  needed.  Silence
24c60 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e   a compiler warn
24c70 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66  ing. */.  }..#if
24c80 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
24c90 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
24ca0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
24cb0 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
24cc0 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66  , if any */.  if
24cd0 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65  ( db->xPreUpdate
24ce0 43 61 6c 6c 62 61 63 6b 20 0a 20 20 20 26 26 20  Callback .   && 
24cf0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
24d00 54 41 42 4c 45 0a 20 20 20 26 26 20 21 28 70 4f  TABLE.   && !(pO
24d10 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
24d20 53 55 50 44 41 54 45 29 0a 20 20 29 7b 0a 20 20  SUPDATE).  ){.  
24d30 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65    sqlite3VdbePre
24d40 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43  UpdateHook(p, pC
24d50 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c  , SQLITE_INSERT,
24d60 20 7a 44 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b   zDb, pTab, x.nK
24d70 65 79 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  ey, pOp->p2);.  
24d80 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20  }.#endif..  if( 
24d90 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
24da0 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
24db0 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70  hange++;.  if( p
24dc0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
24dd0 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e  LASTROWID ) db->
24de0 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
24df0 52 6f 77 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a  Rowid = x.nKey;.
24e00 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
24e10 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
24e20 0a 20 20 20 20 78 2e 70 44 61 74 61 20 3d 20 30  .    x.pData = 0
24e30 3b 0a 20 20 20 20 78 2e 6e 44 61 74 61 20 3d 20  ;.    x.nData = 
24e40 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
24e50 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66  assert( pData->f
24e60 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
24e70 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 20  |MEM_Str) );.   
24e80 20 78 2e 70 44 61 74 61 20 3d 20 70 44 61 74 61   x.pData = pData
24e90 2d 3e 7a 3b 0a 20 20 20 20 78 2e 6e 44 61 74 61  ->z;.    x.nData
24ea0 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 7d   = pData->n;.  }
24eb0 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  .  seekResult = 
24ec0 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
24ed0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
24ee0 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
24ef0 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70  lt : 0);.  if( p
24f00 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
24f10 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 78 2e  M_Zero ){.    x.
24f20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75  nZero = pData->u
24f30 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b  .nZero;.  }else{
24f40 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 30  .    x.nZero = 0
24f50 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65 79 20 3d  ;.  }.  x.pKey =
24f60 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
24f70 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
24f80 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78  ->uc.pCursor, &x
24f90 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
24fa0 20 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70              (pOp
24fb0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50  ->p5 & OPFLAG_AP
24fc0 50 45 4e 44 29 21 3d 30 2c 20 73 65 65 6b 52 65  PEND)!=0, seekRe
24fd0 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e  sult.  );.  pC->
24fe0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
24ff0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
25000 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
25010 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
25020 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
25030 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
25040 2f 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  /.  if( rc ) got
25050 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
25060 72 72 6f 72 3b 0a 20 20 69 66 28 20 64 62 2d 3e  rror;.  if( db->
25070 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
25080 26 26 20 6f 70 20 29 7b 0a 20 20 20 20 64 62 2d  && op ){.    db-
25090 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
250a0 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
250b0 20 6f 70 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e   op, zDb, pTab->
250c0 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a  zName, x.nKey);.
250d0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
250e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74  /* Opcode: Delet
250f0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
25100 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
25110 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
25120 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  h the P1 cursor 
25130 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
25140 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  nting..**.** If 
25150 74 68 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  the OPFLAG_SAVEP
25160 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 74  OSITION bit of t
25170 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20  he P5 parameter 
25180 69 73 20 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20  is set, then.** 
25190 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20  the cursor will 
251a0 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  be left pointing
251b0 20 61 74 20 20 65 69 74 68 65 72 20 74 68 65 20   at  either the 
251c0 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
251d0 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
251e0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
251f0 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
25200 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
25210 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
25220 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
25230 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
25240 65 20 61 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20  e a no-op. As a 
25250 72 65 73 75 6c 74 2c 20 69 6e 20 74 68 69 73 20  result, in this 
25260 63 61 73 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b  case.** it is ok
25270 20 74 6f 20 64 65 6c 65 74 65 20 61 20 72 65 63   to delete a rec
25280 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ord from within 
25290 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20  a Next loop. If 
252a0 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  .** OPFLAG_SAVEP
252b0 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 50  OSITION bit of P
252c0 35 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  5 is clear, then
252d0 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   the cursor will
252e0 20 62 65 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61   be.** left in a
252f0 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74  n undefined stat
25300 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
25310 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
25320 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50   bit is set on P
25330 35 2c 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  5, that indicate
25340 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 64  s that this.** d
25350 65 6c 65 74 65 20 6f 6e 65 20 6f 66 20 73 65 76  elete one of sev
25360 65 72 61 6c 20 61 73 73 6f 63 69 61 74 65 64 20  eral associated 
25370 77 69 74 68 20 64 65 6c 65 74 69 6e 67 20 61 20  with deleting a 
25380 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c  table row and al
25390 6c 20 69 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61  l its.** associa
253a0 74 65 64 20 69 6e 64 65 78 20 65 6e 74 72 69 65  ted index entrie
253b0 73 2e 20 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  s.  Exactly one 
253c0 6f 66 20 74 68 6f 73 65 20 64 65 6c 65 74 65 73  of those deletes
253d0 20 69 73 20 74 68 65 20 22 70 72 69 6d 61 72 79   is the "primary
253e0 22 0a 2a 2a 20 64 65 6c 65 74 65 2e 20 20 54 68  ".** delete.  Th
253f0 65 20 6f 74 68 65 72 73 20 61 72 65 20 61 6c 6c  e others are all
25400 20 6f 6e 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45   on OPFLAG_FORDE
25410 4c 45 54 45 20 63 75 72 73 6f 72 73 20 6f 72 20  LETE cursors or 
25420 65 6c 73 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b  else are.** mark
25430 65 64 20 77 69 74 68 20 74 68 65 20 41 55 58 44  ed with the AUXD
25440 45 4c 45 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a  ELETE flag..**.*
25450 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
25460 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
25470 50 32 20 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50  P2 (NB: P2 not P
25480 35 29 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  5) is set, then 
25490 74 68 65 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67  the row.** chang
254a0 65 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  e count is incre
254b0 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
254c0 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31  e not)..**.** P1
254d0 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65   must not be pse
254e0 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68  udo-table.  It h
254f0 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20  as to be a real 
25500 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75  table with.** mu
25510 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a  ltiple rows..**.
25520 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
25530 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f 69  NULL then it poi
25540 6e 74 73 20 74 6f 20 61 20 54 61 62 6c 65 20 6f  nts to a Table o
25550 62 6a 65 63 74 2e 20 49 6e 20 74 68 69 73 20 63  bject. In this c
25560 61 73 65 20 65 69 74 68 65 72 20 0a 2a 2a 20 74  ase either .** t
25570 68 65 20 75 70 64 61 74 65 20 6f 72 20 70 72 65  he update or pre
25580 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72  -update hook, or
25590 20 62 6f 74 68 2c 20 6d 61 79 20 62 65 20 69 6e   both, may be in
255a0 76 6f 6b 65 64 2e 20 54 68 65 20 50 31 20 63 75  voked. The P1 cu
255b0 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76  rsor must.** hav
255c0 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65  e been positione
255d0 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f  d using OP_NotFo
255e0 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76  und prior to inv
255f0 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  oking this opcod
25600 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61  e in .** this ca
25610 73 65 2e 20 53 70 65 63 69 66 69 63 61 6c 6c 79  se. Specifically
25620 2c 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66  , if one is conf
25630 69 67 75 72 65 64 2c 20 74 68 65 20 70 72 65 2d  igured, the pre-
25640 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a  update hook is .
25650 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20 50 34  ** invoked if P4
25660 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68   is not NULL. Th
25670 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73  e update-hook is
25680 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20   invoked if one 
25690 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a  is configured, .
256a0 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  ** P4 is not NUL
256b0 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50 46 4c 41  L, and the OPFLA
256c0 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 69  G_NCHANGE flag i
256d0 73 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a  s set in P2..**.
256e0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
256f0 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69  _ISUPDATE flag i
25700 73 20 73 65 74 20 69 6e 20 50 32 2c 20 74 68 65  s set in P2, the
25710 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  n P3 contains th
25720 65 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20  e address.** of 
25730 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
25740 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
25750 65 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  e value that the
25760 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f   rowid of the ro
25770 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74  w will.** be set
25780 20 74 6f 20 62 79 20 74 68 65 20 75 70 64 61 74   to by the updat
25790 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  e..*/.case OP_De
257a0 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  lete: {.  VdbeCu
257b0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73  rsor *pC;.  cons
257c0 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54  t char *zDb;.  T
257d0 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e  able *pTab;.  in
257e0 74 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70  t opflags;..  op
257f0 66 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b  flags = pOp->p2;
25800 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25810 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
25820 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
25830 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
25840 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
25850 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
25860 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
25870 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
25880 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
25890 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
258a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
258b0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
258c0 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ==0 );..#ifdef S
258d0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
258e0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
258f0 34 5f 54 41 42 4c 45 20 26 26 20 48 61 73 52 6f  4_TABLE && HasRo
25900 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54 61 62  wid(pOp->p4.pTab
25910 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ) && pOp->p5==0 
25920 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70 35 20  ){.    /* If p5 
25930 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 65 65  is zero, the see
25940 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61 74  k operation that
25950 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20   positioned the 
25960 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f 0a  cursor prior to.
25970 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65 74 65      ** OP_Delete
25980 20 77 69 6c 6c 20 68 61 76 65 20 61 6c 73 6f 20   will have also 
25990 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65  set the pC->move
259a0 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20 74  toTarget field t
259b0 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 20  o the rowid of. 
259c0 20 20 20 2a 2a 20 74 68 65 20 72 6f 77 20 74 68     ** the row th
259d0 61 74 20 69 73 20 62 65 69 6e 67 20 64 65 6c 65  at is being dele
259e0 74 65 64 20 2a 2f 0a 20 20 20 20 69 36 34 20 69  ted */.    i64 i
259f0 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Key = sqlite3Btr
25a00 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d  eeIntegerKey(pC-
25a10 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
25a20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d 6f    assert( pC->mo
25a30 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79  vetoTarget==iKey
25a40 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
25a50 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61    /* If the upda
25a60 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d 75  te-hook or pre-u
25a70 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20  pdate-hook will 
25a80 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20  be invoked, set 
25a90 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20  zDb to.  ** the 
25aa0 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 62 20 74  name of the db t
25ab0 6f 20 70 61 73 73 20 61 73 20 74 6f 20 69 74 2e  o pass as to it.
25ac0 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61 6c 20   Also set local 
25ad0 70 54 61 62 20 74 6f 20 61 20 63 6f 70 79 0a 20  pTab to a copy. 
25ae0 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62 2e 20   ** of p4.pTab. 
25af0 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35 20 69  Finally, if p5 i
25b00 73 20 74 72 75 65 2c 20 69 6e 64 69 63 61 74 69  s true, indicati
25b10 6e 67 20 74 68 61 74 20 74 68 69 73 20 63 75 72  ng that this cur
25b20 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c 61 73  sor was.  ** las
25b30 74 20 6d 6f 76 65 64 20 77 69 74 68 20 4f 50 5f  t moved with OP_
25b40 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65 76 2c  Next or OP_Prev,
25b50 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e 6f 74   not Seek or Not
25b60 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20 2a 2a  Found, set .  **
25b70 20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f 76 65   VdbeCursor.move
25b80 74 6f 54 61 72 67 65 74 20 74 6f 20 74 68 65 20  toTarget to the 
25b90 63 75 72 72 65 6e 74 20 72 6f 77 69 64 2e 20 20  current rowid.  
25ba0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  */.  if( pOp->p4
25bb0 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26  type==P4_TABLE &
25bc0 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f  & HAS_UPDATE_HOO
25bd0 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73  K(db) ){.    ass
25be0 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
25bf0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
25c00 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30 20 29  Op->p4.pTab!=0 )
25c10 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  ;.    zDb = db->
25c20 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62  aDb[pC->iDb].zDb
25c30 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20  SName;.    pTab 
25c40 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a  = pOp->p4.pTab;.
25c50 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35      if( (pOp->p5
25c60 20 26 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f   & OPFLAG_SAVEPO
25c70 53 49 54 49 4f 4e 29 21 3d 30 20 26 26 20 70 43  SITION)!=0 && pC
25c80 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20  ->isTable ){.   
25c90 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
25ca0 67 65 74 20 3d 20 73 71 6c 69 74 65 33 42 74 72  get = sqlite3Btr
25cb0 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d  eeIntegerKey(pC-
25cc0 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
25cd0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
25ce0 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 4e   zDb = 0;   /* N
25cf0 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65  ot needed.  Sile
25d00 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77  nce a compiler w
25d10 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 70  arning. */.    p
25d20 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  Tab = 0;  /* Not
25d30 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63   needed.  Silenc
25d40 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  e a compiler war
25d50 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69  ning. */.  }..#i
25d60 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
25d70 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f  LE_PREUPDATE_HOO
25d80 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  K.  /* Invoke th
25d90 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f  e pre-update-hoo
25da0 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
25db0 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65  /.  if( db->xPre
25dc0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
25dd0 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 20 26  & pOp->p4.pTab &
25de0 26 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  & HasRowid(pTab)
25df0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
25e00 21 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  !(opflags & OPFL
25e10 41 47 5f 49 53 55 50 44 41 54 45 29 20 7c 7c 20  AG_ISUPDATE) || 
25e20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66  (aMem[pOp->p3].f
25e30 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20  lags & MEM_Int) 
25e40 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
25e50 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28  bePreUpdateHook(
25e60 70 2c 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28  p, pC,.        (
25e70 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
25e80 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c  _ISUPDATE) ? SQL
25e90 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c  ITE_UPDATE : SQL
25ea0 49 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20  ITE_DELETE, .   
25eb0 20 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20       zDb, pTab, 
25ec0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
25ed0 2c 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70  ,.        pOp->p
25ee0 33 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69  3.    );.  }.  i
25ef0 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  f( opflags & OPF
25f00 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65  LAG_ISNOOP ) bre
25f10 61 6b 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f  ak;.#endif. .  /
25f20 2a 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61  * Only flags tha
25f30 74 20 63 61 6e 20 62 65 20 73 65 74 20 61 72 65  t can be set are
25f40 20 53 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e   SAVEPOISTION an
25f50 64 20 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a  d AUXDELETE */ .
25f60 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
25f70 70 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41  p5 & ~(OPFLAG_SA
25f80 56 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41  VEPOSITION|OPFLA
25f90 47 5f 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30  G_AUXDELETE))==0
25fa0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
25fb0 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
25fc0 4e 3d 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53  N==BTREE_SAVEPOS
25fd0 49 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72  ITION );.  asser
25fe0 74 28 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c  t( OPFLAG_AUXDEL
25ff0 45 54 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45  ETE==BTREE_AUXDE
26000 4c 45 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20  LETE );..#ifdef 
26010 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
26020 66 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20  f( p->pFrame==0 
26030 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  ){.    if( pC->i
26040 73 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20  sEphemeral==0.  
26050 20 20 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70        && (pOp->p
26060 35 20 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  5 & OPFLAG_AUXDE
26070 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20  LETE)==0.       
26080 20 26 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20   && (pC->wrFlag 
26090 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  & OPFLAG_FORDELE
260a0 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a  TE)==0.      ){.
260b0 20 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65        nExtraDele
260c0 74 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  te++;.    }.    
260d0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  if( pOp->p2 & OP
260e0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a  FLAG_NCHANGE ){.
260f0 20 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65        nExtraDele
26100 74 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  te--;.    }.  }.
26110 23 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73  #endif..  rc = s
26120 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
26130 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
26140 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43  , pOp->p5);.  pC
26150 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
26160 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
26170 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
26180 30 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  0;.  if( rc ) go
26190 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
261a0 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76  error;..  /* Inv
261b0 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
261c0 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
261d0 20 2a 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67   */.  if( opflag
261e0 73 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  s & OPFLAG_NCHAN
261f0 47 45 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68  GE ){.    p->nCh
26200 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20  ange++;.    if( 
26210 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
26220 61 63 6b 20 26 26 20 48 61 73 52 6f 77 69 64 28  ack && HasRowid(
26230 70 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20 64  pTab) ){.      d
26240 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
26250 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
26260 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  g, SQLITE_DELETE
26270 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61  , zDb, pTab->zNa
26280 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 70 43  me,.          pC
26290 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b  ->movetoTarget);
262a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
262b0 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  C->iDb>=0 );.   
262c0 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b   }.  }..  break;
262d0 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  .}./* Opcode: Re
262e0 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a  setCount * * * *
262f0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c   *.**.** The val
26300 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65  ue of the change
26310 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69   counter is copi
26320 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ed to the databa
26330 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61  se handle.** cha
26340 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74  nge counter (ret
26350 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75  urned by subsequ
26360 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c  ent calls to sql
26370 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e  ite3_changes()).
26380 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73  .** Then the VMs
26390 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65   internal change
263a0 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20   counter resets 
263b0 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73  to 0..** This is
263c0 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
263d0 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61   programs..*/.ca
263e0 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74  se OP_ResetCount
263f0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  : {.  sqlite3Vdb
26400 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
26410 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70  p->nChange);.  p
26420 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
26430 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
26440 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70  code: SorterComp
26450 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34 0a  are P1 P2 P3 P4.
26460 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
26470 6b 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b  key(P1)!=trim(r[
26480 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a  P3],P4) goto P2.
26490 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f  **.** P1 is a so
264a0 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69  rter cursor. Thi
264b0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
264c0 6d 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20  mpares a prefix 
264d0 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64  of the.** record
264e0 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
264f0 72 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70  r P3 against a p
26500 72 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74  refix of the ent
26510 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20  ry that .** the 
26520 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75  sorter cursor cu
26530 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74  rrently points t
26540 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72  o.  Only the fir
26550 73 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20  st P4 fields.** 
26560 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65  of r[P3] and the
26570 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61   sorter record a
26580 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a  re compared..**.
26590 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20  ** If either P3 
265a0 6f 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f  or the sorter co
265b0 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e  ntains a NULL in
265c0 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69   one of their si
265d0 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65  gnificant.** fie
265e0 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e  lds (not countin
265f0 67 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20  g the P4 fields 
26600 61 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68  at the end which
26610 20 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68   are ignored) th
26620 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72  en.** the compar
26630 69 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20  ison is assumed 
26640 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a  to be equal..**.
26650 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  ** Fall through 
26660 74 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  to next instruct
26670 69 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72  ion if the two r
26680 65 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65  ecords compare e
26690 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20  qual to.** each 
266a0 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20  other.  Jump to 
266b0 50 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64  P2 if they are d
266c0 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73  ifferent..*/.cas
266d0 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61  e OP_SorterCompa
266e0 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  re: {.  VdbeCurs
266f0 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
26700 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c  s;.  int nKeyCol
26710 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ;..  pC = p->apC
26720 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
26730 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
26740 70 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  pC) );.  assert(
26750 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
26760 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33  _INT32 );.  pIn3
26770 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
26780 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70  ];.  nKeyCol = p
26790 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20  Op->p4.i;.  res 
267a0 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
267b0 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d  te3VdbeSorterCom
267c0 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e  pare(pC, pIn3, n
267d0 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20  KeyCol, &res);. 
267e0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
267f0 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
26800 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
26810 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
26820 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
26830 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
26840 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63  reak;.};../* Opc
26850 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20  ode: SorterData 
26860 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
26870 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
26880 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  data.**.** Write
26890 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
268a0 32 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f  2 the current so
268b0 72 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f  rter data for so
268c0 72 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a  rter cursor P1..
268d0 2a 2a 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68  ** Then clear th
268e0 65 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20  e column header 
268f0 63 61 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20  cache on cursor 
26900 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P3..**.** This o
26910 70 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c  pcode is normall
26920 79 20 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20  y use to move a 
26930 72 65 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68  record out of th
26940 65 20 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74  e sorter and int
26950 6f 0a 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20  o.** a register 
26960 74 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 72  that is the sour
26970 63 65 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d  ce for a pseudo-
26980 74 61 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65  table cursor cre
26990 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70  ated using.** Op
269a0 65 6e 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20  enPseudo.  That 
269b0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72  pseudo-table cur
269c0 73 6f 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74  sor is the one t
269d0 68 61 74 20 69 73 20 69 64 65 6e 74 69 66 69 65  hat is identifie
269e0 64 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65  d by.** paramete
269f0 72 20 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20  r P3.  Clearing 
26a00 74 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61  the P3 column ca
26a10 63 68 65 20 61 73 20 70 61 72 74 20 6f 66 20 74  che as part of t
26a20 68 69 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73  his opcode saves
26a30 0a 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69  .** us from havi
26a40 6e 67 20 74 6f 20 69 73 73 75 65 20 61 20 73 65  ng to issue a se
26a50 70 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69  parate NullRow i
26a60 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c  nstruction to cl
26a70 65 61 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a  ear that cache..
26a80 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
26a90 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  rData: {.  VdbeC
26aa0 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f  ursor *pC;..  pO
26ab0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
26ac0 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  p2];.  pC = p->a
26ad0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
26ae0 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
26af0 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20  r(pC) );.  rc = 
26b00 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
26b10 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74  rRowkey(pC, pOut
26b20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 21  );.  assert( rc!
26b30 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70  =SQLITE_OK || (p
26b40 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Out->flags & MEM
26b50 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65  _Blob) );.  asse
26b60 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
26b70 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
26b80 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 72 63  rsor );.  if( rc
26b90 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
26ba0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d  e_to_error;.  p-
26bb0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d  >apCsr[pOp->p3]-
26bc0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
26bd0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72  ACHE_STALE;.  br
26be0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
26bf0 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32  e: RowData P1 P2
26c00 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
26c10 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a  is: r[P2]=data.*
26c20 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
26c30 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
26c40 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f 6e  complete row con
26c50 74 65 6e 74 20 66 6f 72 20 74 68 65 20 72 6f 77  tent for the row
26c60 20 61 74 20 0a 2a 2a 20 77 68 69 63 68 20 63 75   at .** which cu
26c70 72 73 6f 72 20 50 31 20 69 73 20 63 75 72 72 65  rsor P1 is curre
26c80 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  ntly pointing..*
26c90 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
26ca0 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
26cb0 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49  the data.  .** I
26cc0 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64  t is just copied
26cd0 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67   onto the P2 reg
26ce0 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
26cf0 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
26d00 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
26d10 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
26d20 63 75 72 73 6f 72 20 50 31 20 69 73 20 61 6e 20  cursor P1 is an 
26d30 69 6e 64 65 78 2c 20 74 68 65 6e 20 74 68 65 20  index, then the 
26d40 63 6f 6e 74 65 6e 74 20 69 73 20 74 68 65 20 6b  content is the k
26d50 65 79 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a 2a  ey of the row..*
26d60 2a 20 49 66 20 63 75 72 73 6f 72 20 50 32 20 69  * If cursor P2 i
26d70 73 20 61 20 74 61 62 6c 65 2c 20 74 68 65 6e 20  s a table, then 
26d80 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 78 74 72  the content extr
26d90 61 63 74 65 64 20 69 73 20 74 68 65 20 64 61 74  acted is the dat
26da0 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  a..**.** If the 
26db0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
26dc0 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
26dd0 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
26de0 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
26df0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
26e00 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
26e10 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  e..*/.case OP_Ro
26e20 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  wData: {.  VdbeC
26e30 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
26e40 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
26e50 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d  u32 n;..  pOut =
26e60 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
26e70 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
26e80 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20  nge(p, pOut);.. 
26e90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
26ea0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
26eb0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
26ec0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
26ed0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
26ee0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
26ef0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
26f00 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
26f10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
26f20 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a  orter(pC)==0 );.
26f30 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75    assert( pC->nu
26f40 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73  llRow==0 );.  as
26f50 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
26f60 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72  rsor!=0 );.  pCr
26f70 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
26f80 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  sor;..  /* The O
26f90 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65  P_RowData opcode
26fa0 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20  s always follow 
26fb0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a  OP_NotExists or.
26fc0 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f 77 69    ** OP_SeekRowi
26fd0 64 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2f 4f  d or OP_Rewind/O
26fe0 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69  p_Next with no i
26ff0 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72  ntervening instr
27000 75 63 74 69 6f 6e 73 0a 20 20 2a 2a 20 74 68 61  uctions.  ** tha
27010 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61  t might invalida
27020 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20  te the cursor.. 
27030 20 2a 2a 20 49 66 20 74 68 69 73 20 77 68 65 72   ** If this wher
27040 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20  e not the case, 
27050 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  on of the follow
27060 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20 20  ing assert()s.  
27070 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20  ** would fail.  
27080 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72  Should this ever
27090 20 63 68 61 6e 67 65 20 28 62 65 63 61 75 73 65   change (because
270a0 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74   of changes in t
270b0 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e  he code.  ** gen
270c0 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65  erator) then the
270d0 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f   fix would be to
270e0 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74   insert a call t
270f0 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  o.  ** sqlite3Vd
27100 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
27110 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
27120 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
27130 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
27140 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
27150 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
27160 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f  rsr) );.#if 0  /
27170 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64  * Not required d
27180 75 65 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ue to the previo
27190 75 73 20 74 6f 20 61 73 73 65 72 74 28 29 20 73  us to assert() s
271a0 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72  tatements */.  r
271b0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
271c0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
271d0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
271e0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
271f0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
27200 23 65 6e 64 69 66 0a 0a 20 20 6e 20 3d 20 73 71  #endif..  n = sq
27210 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61  lite3BtreePayloa
27220 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20 20  dSize(pCrsr);.  
27230 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61  if( n>(u32)db->a
27240 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
27250 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
27260 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
27270 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20    }.  testcase( 
27280 6e 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71  n==0 );.  if( sq
27290 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61  lite3VdbeMemClea
272a0 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c  rAndResize(pOut,
272b0 20 4d 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a 20   MAX(n,32)) ){. 
272c0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
272d0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
272e0 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
272f0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
27300 6f 62 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ob);.  rc = sqli
27310 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64 28  te3BtreePayload(
27320 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
27330 74 2d 3e 7a 29 3b 0a 20 20 69 66 28 20 72 63 20  t->z);.  if( rc 
27340 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
27350 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75  _to_error;.  pOu
27360 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
27370 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73  UTF8;  /* In cas
27380 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76  e the blob is ev
27390 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20  er cast to text 
273a0 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  */.  UPDATE_MAX_
273b0 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
273c0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
273d0 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
273e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
273f0 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31  Opcode: Rowid P1
27400 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
27410 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
27420 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69  id.**.** Store i
27430 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
27440 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
27450 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
27460 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
27470 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
27480 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
27490 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65  *.** P1 can be e
274a0 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72  ither an ordinar
274b0 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72  y table or a vir
274c0 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
274d0 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  re used to.** be
274e0 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56   a separate OP_V
274f0 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72  Rowid opcode for
27500 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61   use with virtua
27510 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68  l tables, but th
27520 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65  is.** one opcode
27530 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62   now works for b
27540 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e  oth table types.
27550 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69  .*/.case OP_Rowi
27560 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
27570 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
27580 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
27590 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c  ;.  i64 v;.  sql
275a0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
275b0 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
275c0 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
275d0 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  e;..  pOut = out
275e0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
275f0 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
27600 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
27610 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
27620 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
27630 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
27640 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
27650 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
27660 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
27670 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75  PSEUDO || pC->nu
27680 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70  llRow );.  if( p
27690 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
276a0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
276b0 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72  MEM_Null;.    br
276c0 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eak;.  }else if(
276d0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
276e0 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70  eto ){.    v = p
276f0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b  C->movetoTarget;
27700 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27710 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
27720 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  E.  }else if( pC
27730 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
27740 59 50 45 5f 56 54 41 42 20 29 7b 0a 20 20 20 20  YPE_VTAB ){.    
27750 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
27760 56 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 70  VCur!=0 );.    p
27770 56 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56  Vtab = pC->uc.pV
27780 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20  Cur->pVtab;.    
27790 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
277a0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73  >pModule;.    as
277b0 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
277c0 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20  Rowid );.    rc 
277d0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  = pModule->xRowi
277e0 64 28 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20  d(pC->uc.pVCur, 
277f0 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  &v);.    sqlite3
27800 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
27810 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
27820 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
27830 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
27840 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
27850 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
27860 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  ABLE */.  }else{
27870 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
27880 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
27890 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
278a0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
278b0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
278c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
278d0 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70  eCursorRestore(p
278e0 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  C);.    if( rc )
278f0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
27900 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66  to_error;.    if
27910 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
27920 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
27930 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
27940 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
27950 7d 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65  }.    v = sqlite
27960 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
27970 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
27980 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
27990 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
279a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
279b0 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a  llRow P1 * * * *
279c0 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
279d0 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e  cursor P1 to a n
279e0 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50  ull row.  Any OP
279f0 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f  _Column operatio
27a00 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72  ns.** that occur
27a10 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f   while the curso
27a20 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c  r is on the null
27a30 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73   row will always
27a40 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c  .** write a NULL
27a50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
27a60 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75  lRow: {.  VdbeCu
27a70 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
27a80 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
27a90 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
27aa0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
27ab0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
27ac0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
27ad0 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  =0 );.  pC->null
27ae0 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63  Row = 1;.  pC->c
27af0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
27b00 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
27b10 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
27b20 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20  RTYPE_BTREE ){. 
27b30 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
27b40 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
27b50 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
27b60 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e  ClearCursor(pC->
27b70 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d  uc.pCursor);.  }
27b80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
27b90 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20  Opcode: Last P1 
27ba0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
27bb0 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
27bc0 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
27bd0 75 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74  umn or Prev inst
27be0 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
27bf0 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
27c00 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
27c10 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
27c20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
27c30 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
27c40 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  or index is empt
27c50 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e  y and P2>0, then
27c60 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
27c70 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
27c80 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65  2 is 0 or if the
27c90 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
27ca0 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
27cb0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
27cc0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
27cd0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
27ce0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
27cf0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
27d00 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
27d10 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
27d20 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
27d30 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
27d40 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
27d50 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
27d60 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
27d70 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
27d80 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
27d90 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 2d 31  *.** If P3 is -1
27da0 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f  , then the curso
27db0 72 20 69 73 20 70 6f 73 69 74 69 6f 6e 65 64 20  r is positioned 
27dc0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
27dd0 65 20 62 74 72 65 65 0a 2a 2a 20 66 6f 72 20 74  e btree.** for t
27de0 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 61 70  he purpose of ap
27df0 70 65 6e 64 69 6e 67 20 61 20 6e 65 77 20 65 6e  pending a new en
27e00 74 72 79 20 6f 6e 74 6f 20 74 68 65 20 62 74 72  try onto the btr
27e10 65 65 2e 20 20 49 6e 20 74 68 61 74 0a 2a 2a 20  ee.  In that.** 
27e20 63 61 73 65 20 50 32 20 6d 75 73 74 20 62 65 20  case P2 must be 
27e30 30 2e 20 20 49 74 20 69 73 20 61 73 73 75 6d 65  0.  It is assume
27e40 64 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f  d that the curso
27e50 72 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 66  r is used only f
27e60 6f 72 0a 2a 2a 20 61 70 70 65 6e 64 69 6e 67 20  or.** appending 
27e70 61 6e 64 20 73 6f 20 69 66 20 74 68 65 20 63 75  and so if the cu
27e80 72 73 6f 72 20 69 73 20 76 61 6c 69 64 2c 20 74  rsor is valid, t
27e90 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d  hen the cursor m
27ea0 75 73 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 62  ust already.** b
27eb0 65 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  e pointing at th
27ec0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72  e end of the btr
27ed0 65 65 20 61 6e 64 20 73 6f 20 6e 6f 20 63 68 61  ee and so no cha
27ee0 6e 67 65 73 20 61 72 65 20 6d 61 64 65 20 74 6f  nges are made to
27ef0 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 0a  .** the cursor..
27f00 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a  */.case OP_Last:
27f10 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
27f20 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
27f30 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
27f40 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
27f50 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
27f60 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
27f70 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
27f80 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
27f90 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
27fa0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
27fb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
27fc0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
27fd0 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73  _BTREE );.  pCrs
27fe0 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
27ff0 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  or;.  res = 0;. 
28000 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
28010 30 20 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52  0 );.  pC->seekR
28020 65 73 75 6c 74 20 3d 20 70 4f 70 2d 3e 70 33 3b  esult = pOp->p3;
28030 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
28040 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
28050 70 20 3d 20 4f 50 5f 4c 61 73 74 3b 0a 23 65 6e  p = OP_Last;.#en
28060 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  dif.  if( pOp->p
28070 33 3d 3d 30 20 7c 7c 20 21 73 71 6c 69 74 65 33  3==0 || !sqlite3
28080 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
28090 69 64 4e 4e 28 70 43 72 73 72 29 20 29 7b 0a 20  idNN(pCrsr) ){. 
280a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
280b0 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20  treeLast(pCrsr, 
280c0 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6e  &res);.    pC->n
280d0 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
280e0 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
280f0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
28100 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
28110 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
28120 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
28130 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
28140 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70  error;.    if( p
28150 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20  Op->p2>0 ){.    
28160 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
28170 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20  n(res!=0,2);.   
28180 20 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74     if( res ) got
28190 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
281a0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
281b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
281c0 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65  ==0 );.  }.  bre
281d0 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
281e0 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20  e: Sort P1 P2 * 
281f0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
28200 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74  pcode does exact
28210 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
28220 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65  g as OP_Rewind e
28230 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74  xcept that.** it
28240 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75   increments an u
28250 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62  ndocumented glob
28260 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64  al variable used
28270 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a   for testing..**
28280 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61  .** Sorting is a
28290 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77  ccomplished by w
282a0 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69  riting records i
282b0 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e  nto a sorting in
282c0 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77  dex,.** then rew
282d0 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65  inding that inde
282e0 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74  x and playing it
282f0 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e   back from begin
28300 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20  ning to.** end. 
28310 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53   We use the OP_S
28320 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65  ort opcode inste
28330 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20  ad of OP_Rewind 
28340 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77  to do the.** rew
28350 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74  inding so that t
28360 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
28370 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65  le will be incre
28380 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65  mented and.** re
28390 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63  gression tests c
283a0 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  an determine whe
283b0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
283c0 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20  optimizer is.** 
283d0 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69  correctly optimi
283e0 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a  zing out sorts..
283f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
28400 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d  rSort:    /* jum
28410 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  p */.case OP_Sor
28420 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
28430 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
28440 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
28450 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b  te3_sort_count++
28460 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  ;.  sqlite3_sear
28470 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64  ch_count--;.#end
28480 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  if.  p->aCounter
28490 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
284a0 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a  US_SORT]++;.  /*
284b0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
284c0 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a  to OP_Rewind */.
284d0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77  }./* Opcode: Rew
284e0 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ind P1 P2 * * *.
284f0 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
28500 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
28510 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
28520 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
28530 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
28540 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  fer to the first
28550 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
28560 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
28570 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
28580 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
28590 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69  is empty, jump i
285a0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
285b0 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
285c0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
285d0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
285e0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c  rough to the fol
285f0 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72  lowing .** instr
28600 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
28610 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
28620 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
28630 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
28640 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
28650 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
28660 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
28670 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
28680 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
28690 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
286a0 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
286b0 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61   not Prev..*/.ca
286c0 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20  se OP_Rewind: { 
286d0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
286e0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
286f0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
28700 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
28710 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
28720 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
28730 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
28740 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
28750 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
28760 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
28770 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
28780 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  (pC)==(pOp->opco
28790 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72  de==OP_SorterSor
287a0 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b  t) );.  res = 1;
287b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
287c0 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
287d0 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23  p = OP_Rewind;.#
287e0 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f  endif.  if( isSo
287f0 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
28800 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
28810 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c  SorterRewind(pC,
28820 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b   &res);.  }else{
28830 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
28840 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
28850 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
28860 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
28870 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65  Cursor;.    asse
28880 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
28890 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
288a0 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
288b0 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65  res);.    pC->de
288c0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
288d0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
288e0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
288f0 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72  ALE;.  }.  if( r
28900 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
28910 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
28920 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
28930 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20  )res;.  assert( 
28940 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
28950 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
28960 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
28970 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
28980 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
28990 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
289a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
289b0 4e 65 78 74 20 50 31 20 50 32 20 50 33 20 50 34  Next P1 P2 P3 P4
289c0 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63   P5.**.** Advanc
289d0 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  e cursor P1 so t
289e0 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
289f0 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61   the next key/da
28a00 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
28a10 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
28a20 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
28a30 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75  no more key/valu
28a40 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
28a50 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
28a60 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
28a70 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
28a80 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64  if the cursor ad
28a90 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73  vance was succes
28aa0 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
28ab0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
28ac0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20  .**.** The Next 
28ad0 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76  opcode is only v
28ae0 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  alid following a
28af0 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  n SeekGT, SeekGE
28b00 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e  , or.** OP_Rewin
28b10 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f  d opcode used to
28b20 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75   position the cu
28b30 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e  rsor.  Next is n
28b40 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f  ot allowed.** to
28b50 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20   follow SeekLT, 
28b60 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61  SeekLE, or OP_La
28b70 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  st..**.** The P1
28b80 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
28b90 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
28ba0 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
28bb0 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68  able.  P1 must h
28bc0 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e  ave.** been open
28bd0 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73  ed prior to this
28be0 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70   opcode or the p
28bf0 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66  rogram will segf
28c00 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ault..**.** The 
28c10 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69  P3 value is a hi
28c20 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20  nt to the btree 
28c30 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
28c40 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a  If P3==1, that.*
28c50 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e  * means P1 is an
28c60 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74   SQL index and t
28c70 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63  hat this instruc
28c80 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20  tion could have 
28c90 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20  been.** omitted 
28ca0 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61  if that index ha
28cb0 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20  d been unique.  
28cc0 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e  P3 is usually 0.
28cd0 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79    P3 is.** alway
28ce0 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
28cf0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
28d00 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
28d10 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
28d20 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
28d30 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
28d40 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a  3BtreeNext()..**
28d50 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
28d60 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
28d70 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
28d80 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
28d90 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
28da0 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
28db0 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
28dc0 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  emented..**.** S
28dd0 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e  ee also: Prev, N
28de0 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20  extIfOpen.*/./* 
28df0 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70  Opcode: NextIfOp
28e00 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  en P1 P2 P3 P4 P
28e10 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  5.**.** This opc
28e20 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ode works just l
28e30 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74 20  ike Next except 
28e40 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20 50  that if cursor P
28e50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e  1 is not.** open
28e60 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f   it behaves a no
28e70 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  -op..*/./* Opcod
28e80 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50 33  e: Prev P1 P2 P3
28e90 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63   P4 P5.**.** Bac
28ea0 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73  k up cursor P1 s
28eb0 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
28ec0 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
28ed0 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
28ee0 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
28ef0 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
28f00 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75  re is no previou
28f10 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  s key/value pair
28f20 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
28f30 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
28f40 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
28f50 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
28f60 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77   cursor backup w
28f70 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
28f80 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
28f90 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a  ly to P2..**.**.
28fa0 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f  ** The Prev opco
28fb0 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
28fc0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
28fd0 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72  ekLT, SeekLE, or
28fe0 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f  .** OP_Last opco
28ff0 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74  de used to posit
29000 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ion the cursor. 
29010 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c   Prev is not all
29020 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f  owed.** to follo
29030 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  w SeekGT, SeekGE
29040 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a  , or OP_Rewind..
29050 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
29060 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
29070 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
29080 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
29090 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e  .  If P1 is.** n
290a0 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65  ot open then the
290b0 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64   behavior is und
290c0 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  efined..**.** Th
290d0 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
290e0 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
290f0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
29100 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
29110 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
29120 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
29130 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
29140 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
29150 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
29160 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
29170 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
29180 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
29190 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
291a0 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
291b0 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
291c0 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
291d0 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
291e0 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
291f0 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
29200 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
29210 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
29220 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
29230 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
29240 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
29250 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
29260 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
29270 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
29280 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
29290 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65  /./* Opcode: Pre
292a0 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  vIfOpen P1 P2 P3
292b0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
292c0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
292d0 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78  ust like Prev ex
292e0 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72  cept that if cur
292f0 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a  sor P1 is not.**
29300 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73   open it behaves
29310 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
29320 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a  e OP_SorterNext:
29330 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20   {  /* jump */. 
29340 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
29350 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70  .  int res;..  p
29360 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
29370 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
29380 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
29390 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63  .  res = 0;.  rc
293a0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
293b0 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c  rterNext(db, pC,
293c0 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e   &res);.  goto n
293d0 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f  ext_tail;.case O
293e0 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20  P_PrevIfOpen:   
293f0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
29400 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20   OP_NextIfOpen: 
29410 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
29420 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  if( p->apCsr[pOp
29430 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b  ->p1]==0 ) break
29440 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
29450 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  ugh */.case OP_P
29460 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  rev:          /*
29470 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
29480 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20 20  _Next:          
29490 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
294a0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
294b0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
294c0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
294d0 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79  t( pOp->p5<Array
294e0 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72  Size(p->aCounter
294f0 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
29500 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
29510 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   res = pOp->p3;.
29520 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
29530 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
29540 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
29550 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
29560 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
29570 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
29580 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d 30 20   assert( res==0 
29590 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20 70 43  || (res==1 && pC
295a0 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b  ->isTable==0) );
295b0 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73  .  testcase( res
295c0 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==1 );.  assert(
295d0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
295e0 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Next || pOp->p4
295f0 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
29600 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20  e3BtreeNext );. 
29610 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
29620 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c  code!=OP_Prev ||
29630 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
29640 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
29650 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73  revious );.  ass
29660 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
29670 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20  !=OP_NextIfOpen 
29680 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
29690 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
296a0 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72  eNext );.  asser
296b0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
296c0 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c  OP_PrevIfOpen ||
296d0 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
296e0 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
296f0 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20  revious);..  /* 
29700 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20  The Next opcode 
29710 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74  is only used aft
29720 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  er SeekGT, SeekG
29730 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20  E, and Rewind.. 
29740 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63   ** The Prev opc
29750 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ode is only used
29760 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53   after SeekLT, S
29770 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e  eekLE, and Last.
29780 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
29790 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
297a0 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  xt || pOp->opcod
297b0 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  e!=OP_NextIfOpen
297c0 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
297d0 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54  eekOp==OP_SeekGT
297e0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
297f0 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20  OP_SeekGE.      
29800 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
29810 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d  OP_Rewind || pC-
29820 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e  >seekOp==OP_Foun
29830 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  d);.  assert( pO
29840 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
29850 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  ev || pOp->opcod
29860 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e  e!=OP_PrevIfOpen
29870 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
29880 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54  eekOp==OP_SeekLT
29890 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
298a0 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20 20  OP_SeekLE.      
298b0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
298c0 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63  OP_Last );..  rc
298d0 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61   = pOp->p4.xAdva
298e0 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  nce(pC->uc.pCurs
298f0 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f  or, &res);.next_
29900 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68  tail:.  pC->cach
29910 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
29920 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61  STALE;.  VdbeBra
29930 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c  nchTaken(res==0,
29940 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  2);.  if( rc ) g
29950 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
29960 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65  _error;.  if( re
29970 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e  s==0 ){.    pC->
29980 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
29990 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
299a0 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20  ->p5]++;.#ifdef 
299b0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
299c0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
299d0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
299e0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
299f0 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
29a00 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65  _interrupt;.  }e
29a10 6c 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  lse{.    pC->nul
29a20 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  lRow = 1;.  }.  
29a30 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69  goto check_for_i
29a40 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20  nterrupt;.}../* 
29a50 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72  Opcode: IdxInser
29a60 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
29a70 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
29a80 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65  y=r[P2].**.** Re
29a90 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20  gister P2 holds 
29aa0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79  an SQL index key
29ab0 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a   made using the.
29ac0 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  ** MakeRecord in
29ad0 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69  structions.  Thi
29ae0 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20  s opcode writes 
29af0 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f  that key.** into
29b00 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20   the index P1.  
29b10 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74  Data for the ent
29b20 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a  ry is nil..**.**
29b30 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 7a 65   If P4 is not ze
29b40 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74  ro, then it is t
29b50 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c  he number of val
29b60 75 65 73 20 69 6e 20 74 68 65 20 75 6e 70 61 63  ues in the unpac
29b70 6b 65 64 0a 2a 2a 20 6b 65 79 20 6f 66 20 72 65  ked.** key of re
29b80 67 28 50 32 29 2e 20 20 49 6e 20 74 68 61 74 20  g(P2).  In that 
29b90 63 61 73 65 2c 20 50 33 20 69 73 20 74 68 65 20  case, P3 is the 
29ba0 69 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69 72  index of the fir
29bb0 73 74 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 66  st register.** f
29bc0 6f 72 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20  or the unpacked 
29bd0 6b 65 79 2e 20 20 54 68 65 20 61 76 61 69 6c 61  key.  The availa
29be0 62 69 6c 69 74 79 20 6f 66 20 74 68 65 20 75 6e  bility of the un
29bf0 70 61 63 6b 65 64 20 6b 65 79 20 63 61 6e 20 73  packed key can s
29c00 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 62 65 20 61  ometimes.** be a
29c10 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
29c20 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
29c30 74 68 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  the OPFLAG_APPEN
29c40 44 20 62 69 74 20 73 65 74 2c 20 74 68 61 74 20  D bit set, that 
29c50 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
29c60 20 62 2d 74 72 65 65 20 6c 61 79 65 72 0a 2a 2a   b-tree layer.**
29c70 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 65 72   that this inser
29c80 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  t is likely to b
29c90 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a  e an append..**.
29ca0 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
29cb0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
29cc0 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68  bit set, then th
29cd0 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
29ce0 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
29cf0 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72  ed by this instr
29d00 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20  uction.  If the 
29d10 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62  OPFLAG_NCHANGE b
29d20 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20  it is clear,.** 
29d30 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20  then the change 
29d40 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61  counter is uncha
29d50 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  nged..**.** If t
29d60 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
29d70 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20  KRESULT flag of 
29d80 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 20 69  P5 is set, the i
29d90 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69  mplementation mi
29da0 67 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65  ght.** run faste
29db0 72 20 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e  r by avoiding an
29dc0 20 75 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65   unnecessary see
29dd0 6b 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20  k on cursor P1. 
29de0 20 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65   However,.** the
29df0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
29e00 45 53 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20  ESULT flag must 
29e10 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20 74  only be set if t
29e20 68 65 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e  here have been n
29e30 6f 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73  o prior.** seeks
29e40 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f   on the cursor o
29e50 72 20 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65  r if the most re
29e60 63 65 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61  cent seek used a
29e70 20 6b 65 79 20 65 71 75 69 76 61 6c 65 6e 74 0a   key equivalent.
29e80 2a 2a 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a  ** to P2. .**.**
29e90 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
29ea0 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  n only works for
29eb0 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65   indices.  The e
29ec0 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
29ed0 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62  ction.** for tab
29ee0 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74  les is OP_Insert
29ef0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
29f00 53 6f 72 74 65 72 49 6e 73 65 72 74 20 50 31 20  SorterInsert P1 
29f10 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
29f20 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a  psis: key=r[P2].
29f30 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
29f40 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69  2 holds an SQL i
29f50 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
29f60 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
29f70 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
29f80 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
29f90 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
29fa0 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73 6f 72  .** into the sor
29fb0 74 65 72 20 50 31 2e 20 20 44 61 74 61 20 66 6f  ter P1.  Data fo
29fc0 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e  r the entry is n
29fd0 69 6c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  il..*/.case OP_S
29fe0 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20  orterInsert:    
29ff0 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73     /* in2 */.cas
2a000 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20  e OP_IdxInsert: 
2a010 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  {        /* in2 
2a020 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
2a030 2a 70 43 3b 0a 20 20 42 74 72 65 65 50 61 79 6c  *pC;.  BtreePayl
2a040 6f 61 64 20 78 3b 0a 0a 20 20 61 73 73 65 72 74  oad x;..  assert
2a050 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2a060 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2a070 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2a080 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2a090 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2a0a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
2a0b0 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d  orter(pC)==(pOp-
2a0c0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
2a0d0 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70  erInsert) );.  p
2a0e0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
2a0f0 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
2a100 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
2a110 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20  M_Blob );.  if( 
2a120 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
2a130 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
2a140 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72  hange++;.  asser
2a150 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2a160 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 7c  =CURTYPE_BTREE |
2a170 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2a180 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29  P_SorterInsert )
2a190 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2a1a0 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
2a1b0 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
2a1c0 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 20  pIn2);.  if( rc 
2a1d0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2a1e0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
2a1f0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2a200 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29 7b  _SorterInsert ){
2a210 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2a220 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65  3VdbeSorterWrite
2a230 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 7d 65  (pC, pIn2);.  }e
2a240 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 4b 65 79 20  lse{.    x.nKey 
2a250 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 78  = pIn2->n;.    x
2a260 2e 70 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b  .pKey = pIn2->z;
2a270 0a 20 20 20 20 78 2e 61 4d 65 6d 20 3d 20 61 4d  .    x.aMem = aM
2a280 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  em + pOp->p3;.  
2a290 20 20 78 2e 6e 4d 65 6d 20 3d 20 28 75 31 36 29    x.nMem = (u16)
2a2a0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72  pOp->p4.i;.    r
2a2b0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2a2c0 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70 43  Insert(pC->uc.pC
2a2d0 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20  ursor, &x,.     
2a2e0 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f      (pOp->p5 & O
2a2f0 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d 30  PFLAG_APPEND)!=0
2a300 2c 20 0a 20 20 20 20 20 20 20 20 28 28 70 4f 70  , .        ((pOp
2a310 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
2a320 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
2a330 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
2a340 30 29 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20  0).        );.  
2a350 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
2a360 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
2a370 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  );.    pC->cache
2a380 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
2a390 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20  TALE;.  }.  if( 
2a3a0 72 63 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  rc) goto abort_d
2a3b0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
2a3c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2a3d0 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31  de: IdxDelete P1
2a3e0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2a3f0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
2a400 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  @P3].**.** The c
2a410 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67  ontent of P3 reg
2a420 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
2a430 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66  at register P2 f
2a440 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b  orm.** an unpack
2a450 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68  ed index key. Th
2a460 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65  is opcode remove
2a470 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f  s that entry fro
2a480 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20  m the .** index 
2a490 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
2a4a0 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
2a4b0 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56  IdxDelete: {.  V
2a4c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2a4d0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
2a4e0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
2a4f0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
2a500 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2a510 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p3>0 );.  asser
2a520 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
2a530 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c  pOp->p2+pOp->p3<
2a540 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
2a550 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
2a560 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2a570 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2a580 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2a590 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2a5a0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2a5b0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
2a5c0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2a5d0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2a5e0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
2a5f0 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61  >uc.pCursor;.  a
2a600 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
2a610 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2a620 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70  ->p5==0 );.  r.p
2a630 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
2a640 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65  eyInfo;.  r.nFie
2a650 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
2a660 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  3;.  r.default_r
2a670 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20  c = 0;.  r.aMem 
2a680 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2a690 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2a6a0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
2a6b0 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30  ked(pCrsr, &r, 0
2a6c0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66  , 0, &res);.  if
2a6d0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2a6e0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2a6f0 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
2a700 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2a710 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72 73  BtreeDelete(pCrs
2a720 72 2c 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45  r, BTREE_AUXDELE
2a730 54 45 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  TE);.    if( rc 
2a740 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2a750 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
2a760 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
2a770 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
2a780 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
2a790 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
2a7a0 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  E;.  pC->seekRes
2a7b0 75 6c 74 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  ult = 0;.  break
2a7c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2a7d0 53 65 65 6b 20 50 31 20 2a 20 50 33 20 50 34 20  Seek P1 * P3 P4 
2a7e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 4d  *.** Synopsis: M
2a7f0 6f 76 65 20 50 33 20 74 6f 20 50 31 2e 72 6f 77  ove P3 to P1.row
2a800 69 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  id.**.** P1 is a
2a810 6e 20 6f 70 65 6e 20 69 6e 64 65 78 20 63 75 72  n open index cur
2a820 73 6f 72 20 61 6e 64 20 50 33 20 69 73 20 61 20  sor and P3 is a 
2a830 63 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f  cursor on the co
2a840 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74  rresponding.** t
2a850 61 62 6c 65 2e 20 20 54 68 69 73 20 6f 70 63 6f  able.  This opco
2a860 64 65 20 64 6f 65 73 20 61 20 64 65 66 65 72 72  de does a deferr
2a870 65 64 20 73 65 65 6b 20 6f 66 20 74 68 65 20 50  ed seek of the P
2a880 33 20 74 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a  3 table cursor.*
2a890 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  * to the row tha
2a8a0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
2a8b0 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
2a8c0 20 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68   of P1..**.** Th
2a8d0 69 73 20 69 73 20 61 20 64 65 66 65 72 72 65 64  is is a deferred
2a8e0 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20   seek.  Nothing 
2a8f0 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73  actually happens
2a900 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75   until.** the cu
2a910 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20  rsor is used to 
2a920 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20  read a record.  
2a930 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20  That way, if no 
2a940 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20  reads.** occur, 
2a950 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49  no unnecessary I
2a960 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a  /O happens..**.*
2a970 2a 20 50 34 20 6d 61 79 20 62 65 20 61 6e 20 61  * P4 may be an a
2a980 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73  rray of integers
2a990 20 28 74 79 70 65 20 50 34 5f 49 4e 54 41 52 52   (type P4_INTARR
2a9a0 41 59 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a  AY) containing.*
2a9b0 2a 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * one entry for 
2a9c0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
2a9d0 68 65 20 50 33 20 74 61 62 6c 65 2e 20 20 49 66  he P3 table.  If
2a9e0 20 61 72 72 61 79 20 65 6e 74 72 79 20 61 28 69   array entry a(i
2a9f0 29 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  ).** is non-zero
2aa00 2c 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63  , then reading c
2aa10 6f 6c 75 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f  olumn a(i)-1 fro
2aa20 6d 20 63 75 72 73 6f 72 20 50 33 20 69 73 20 0a  m cursor P3 is .
2aa30 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  ** equivalent to
2aa40 20 70 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 20   performing the 
2aa50 64 65 66 65 72 72 65 64 20 73 65 65 6b 20 61 6e  deferred seek an
2aa60 64 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63  d then reading c
2aa70 6f 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d  olumn i .** from
2aa80 20 50 31 2e 20 20 54 68 69 73 20 69 6e 66 6f 72   P1.  This infor
2aa90 6d 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64  mation is stored
2aaa0 20 69 6e 20 50 33 20 61 6e 64 20 75 73 65 64 20   in P3 and used 
2aab0 74 6f 20 72 65 64 69 72 65 63 74 0a 2a 2a 20 72  to redirect.** r
2aac0 65 61 64 73 20 61 67 61 69 6e 73 74 20 50 33 20  eads against P3 
2aad0 6f 76 65 72 20 74 6f 20 50 31 2c 20 74 68 75 73  over to P1, thus
2aae0 20 70 6f 73 73 69 62 6c 79 20 61 76 6f 69 64 69   possibly avoidi
2aaf0 6e 67 20 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a  ng the need to.*
2ab00 2a 20 73 65 65 6b 20 61 6e 64 20 72 65 61 64 20  * seek and read 
2ab10 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a  cursor P3..*/./*
2ab20 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69   Opcode: IdxRowi
2ab30 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
2ab40 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
2ab50 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69  =rowid.**.** Wri
2ab60 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
2ab70 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77   P2 an integer w
2ab80 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74  hich is the last
2ab90 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65   entry in the re
2aba0 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65  cord at.** the e
2abb0 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  nd of the index 
2abc0 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  key pointed to b
2abd0 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68  y cursor P1.  Th
2abe0 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c  is integer shoul
2abf0 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69  d be.** the rowi
2ac00 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  d of the table e
2ac10 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68  ntry to which th
2ac20 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70  is index entry p
2ac30 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  oints..**.** See
2ac40 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61   also: Rowid, Ma
2ac50 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73  keRecord..*/.cas
2ac60 65 20 4f 50 5f 53 65 65 6b 3a 0a 63 61 73 65 20  e OP_Seek:.case 
2ac70 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20  OP_IdxRowid: {  
2ac80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
2ac90 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ut2 */.  VdbeCur
2aca0 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20  sor *pC;        
2acb0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
2acc0 31 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a  1 index cursor *
2acd0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2ace0 70 54 61 62 43 75 72 3b 20 20 20 20 20 20 20 20  pTabCur;        
2acf0 20 20 20 2f 2a 20 54 68 65 20 50 32 20 74 61 62     /* The P2 tab
2ad00 6c 65 20 63 75 72 73 6f 72 20 28 4f 50 5f 53 65  le cursor (OP_Se
2ad10 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20 20 69 36  ek only) */.  i6
2ad20 34 20 72 6f 77 69 64 3b 20 20 20 20 20 20 20 20  4 rowid;        
2ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2ad40 52 6f 77 69 64 20 74 68 61 74 20 50 31 20 63 75  Rowid that P1 cu
2ad50 72 72 65 6e 74 20 70 6f 69 6e 74 73 20 74 6f 20  rrent points to 
2ad60 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
2ad70 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2ad80 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2ad90 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2ada0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2adb0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2adc0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2add0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2ade0 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
2adf0 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
2ae00 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2ae10 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
2ae20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2ae30 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
2ae40 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2ae50 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20  !pC->nullRow || 
2ae60 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2ae70 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a 20 20 2f  IdxRowid );..  /
2ae80 2a 20 54 68 65 20 49 64 78 52 6f 77 69 64 20 61  * The IdxRowid a
2ae90 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64 65 73 20  nd Seek opcodes 
2aea0 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 62 65 63  are combined bec
2aeb0 61 75 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d  ause of the comm
2aec0 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20 6f 66 20  onality.  ** of 
2aed0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
2aee0 72 52 65 73 74 6f 72 65 28 29 20 61 6e 64 20 73  rRestore() and s
2aef0 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
2af00 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63 20 3d 20  id(). */.  rc = 
2af10 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
2af20 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 0a 20  rRestore(pC);.. 
2af30 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75   /* sqlite3VbeCu
2af40 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61  rsorRestore() ca
2af50 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74  n only fail if t
2af60 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 62 65  he record has be
2af70 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20  en deleted.  ** 
2af80 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74  out from under t
2af90 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74  he cursor.  That
2afa0 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70   will never happ
2afb0 65 6e 73 20 66 6f 72 20 61 6e 20 49 64 78 52 6f  ens for an IdxRo
2afc0 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53 65 65 6b  wid.  ** or Seek
2afd0 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 66 28   opcode */.  if(
2afe0 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
2aff0 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
2b000 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2b010 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c  ..  if( !pC->nul
2b020 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69  lRow ){.    rowi
2b030 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  d = 0;  /* Not n
2b040 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
2b050 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
2b060 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72  arning. */.    r
2b070 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
2b080 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 2d 3e  dxRowid(db, pC->
2b090 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 6f 77  uc.pCursor, &row
2b0a0 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  id);.    if( rc!
2b0b0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2b0c0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
2b0d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
2b0e0 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e   }.    if( pOp->
2b0f0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 20  opcode==OP_Seek 
2b100 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
2b110 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70   pOp->p3>=0 && p
2b120 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p3<p->nCurso
2b130 72 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43  r );.      pTabC
2b140 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
2b150 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61 73  p->p3];.      as
2b160 73 65 72 74 28 20 70 54 61 62 43 75 72 21 3d 30  sert( pTabCur!=0
2b170 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
2b180 28 20 70 54 61 62 43 75 72 2d 3e 65 43 75 72 54  ( pTabCur->eCurT
2b190 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2b1a0 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  EE );.      asse
2b1b0 72 74 28 20 70 54 61 62 43 75 72 2d 3e 75 63 2e  rt( pTabCur->uc.
2b1c0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
2b1d0 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
2b1e0 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a  Cur->isTable );.
2b1f0 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 6e        pTabCur->n
2b200 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
2b210 20 20 70 54 61 62 43 75 72 2d 3e 6d 6f 76 65 74    pTabCur->movet
2b220 6f 54 61 72 67 65 74 20 3d 20 72 6f 77 69 64 3b  oTarget = rowid;
2b230 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e  .      pTabCur->
2b240 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
2b250 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   1;.      assert
2b260 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
2b270 34 5f 49 4e 54 41 52 52 41 59 20 7c 7c 20 70 4f  4_INTARRAY || pO
2b280 70 2d 3e 70 34 2e 61 69 3d 3d 30 20 29 3b 0a 20  p->p4.ai==0 );. 
2b290 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 61 41       pTabCur->aA
2b2a0 6c 74 4d 61 70 20 3d 20 70 4f 70 2d 3e 70 34 2e  ltMap = pOp->p4.
2b2b0 61 69 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75  ai;.      pTabCu
2b2c0 72 2d 3e 70 41 6c 74 43 75 72 73 6f 72 20 3d 20  r->pAltCursor = 
2b2d0 70 43 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  pC;.    }else{. 
2b2e0 20 20 20 20 20 70 4f 75 74 20 3d 20 6f 75 74 32       pOut = out2
2b2f0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
2b300 70 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  p);.      pOut->
2b310 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  u.i = rowid;.   
2b320 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
2b330 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a   MEM_Int;.    }.
2b340 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
2b350 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2b360 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b  ==OP_IdxRowid );
2b370 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2b380 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d  MemSetNull(&aMem
2b390 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a  [pOp->p2]);.  }.
2b3a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2b3b0 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20  pcode: IdxGE P1 
2b3c0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
2b3d0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
2b3e0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
2b3f0 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
2b400 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
2b410 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
2b420 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
2b430 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
2b440 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20  he PRIMARY KEY. 
2b450 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
2b460 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20  y value against 
2b470 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68  the index .** th
2b480 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2b490 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2b4a0 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2b4b0 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
2b4c0 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20  D .** fields at 
2b4d0 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49  the end..**.** I
2b4e0 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
2b4f0 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20  ntry is greater 
2b500 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
2b510 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a   the key value.*
2b520 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  * then jump to P
2b530 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61  2.  Otherwise fa
2b540 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2b550 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2b560 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
2b570 3a 20 49 64 78 47 54 20 50 31 20 50 32 20 50 33  : IdxGT P1 P2 P3
2b580 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2b590 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
2b5a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
2b5b0 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
2b5c0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
2b5d0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
2b5e0 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
2b5f0 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
2b600 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70  IMARY KEY.  Comp
2b610 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
2b620 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
2b630 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
2b640 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
2b650 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
2b660 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
2b670 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a  KEY or ROWID .**
2b680 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
2b690 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nd..**.** If the
2b6a0 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2b6b0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
2b6c0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a  the key value.**
2b6d0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
2b6e0 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  .  Otherwise fal
2b6f0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2b700 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
2b710 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
2b720 20 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20   IdxLT P1 P2 P3 
2b730 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2b740 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
2b750 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
2b760 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
2b770 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
2b780 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
2b790 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
2b7a0 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
2b7b0 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
2b7c0 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
2b7d0 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
2b7e0 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  st.** the index 
2b7f0 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
2b800 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
2b810 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
2b820 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a  RIMARY KEY or.**
2b830 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
2b840 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
2b850 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
2b860 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  try is less than
2b870 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74   the key value t
2b880 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
2b890 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  ** Otherwise fal
2b8a0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2b8b0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
2b8c0 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
2b8d0 20 49 64 78 4c 45 20 50 31 20 50 32 20 50 33 20   IdxLE P1 P2 P3 
2b8e0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2b8f0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
2b900 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
2b910 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
2b920 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
2b930 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
2b940 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
2b950 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
2b960 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
2b970 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
2b980 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
2b990 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  st.** the index 
2b9a0 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
2b9b0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
2b9c0 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
2b9d0 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a  RIMARY KEY or.**
2b9e0 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
2b9f0 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
2ba00 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
2ba10 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  try is less than
2ba20 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
2ba30 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20   key value then 
2ba40 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f  jump.** to P2. O
2ba50 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2ba60 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2ba70 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2ba80 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a  /.case OP_IdxLE:
2ba90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
2baa0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  p */.case OP_Idx
2bab0 47 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  GT:          /* 
2bac0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
2bad0 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20  IdxLT:          
2bae0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
2baf0 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20  OP_IdxGE:  {    
2bb00 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2bb10 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
2bb20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
2bb30 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a  ackedRecord r;..
2bb40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2bb50 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2bb60 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2bb70 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2bb80 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2bb90 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2bba0 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72  ert( pC->isOrder
2bbb0 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
2bbc0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2bbd0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2bbe0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
2bbf0 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61  pCursor!=0);.  a
2bc00 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2bc10 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2bc20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2bc30 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
2bc40 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
2bc50 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2bc60 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65  INT32 );.  r.pKe
2bc70 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
2bc80 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64  Info;.  r.nField
2bc90 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
2bca0 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  i;.  if( pOp->op
2bcb0 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b  code<OP_IdxLT ){
2bcc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2bcd0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2bce0 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  LE || pOp->opcod
2bcf0 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
2bd00 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
2bd10 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  = -1;.  }else{. 
2bd20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2bd30 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
2bd40 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2bd50 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20  =OP_IdxLT );.   
2bd60 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
2bd70 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20  0;.  }.  r.aMem 
2bd80 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2bd90 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2bda0 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b  DEBUG.  { int i;
2bdb0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
2bdc0 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
2bdd0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
2bde0 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
2bdf0 65 6e 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b  endif.  res = 0;
2be00 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
2be10 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
2be20 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
2be30 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
2be40 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d  te3VdbeIdxKeyCom
2be50 70 61 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c  pare(db, pC, &r,
2be60 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74   &res);.  assert
2be70 28 20 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d  ( (OP_IdxLE&1)==
2be80 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20  (OP_IdxLT&1) && 
2be90 28 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f  (OP_IdxGE&1)==(O
2bea0 50 5f 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20  P_IdxGT&1) );.  
2beb0 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  if( (pOp->opcode
2bec0 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31  &1)==(OP_IdxLT&1
2bed0 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
2bee0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2bef0 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxLE || pOp->o
2bf00 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
2bf10 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65  );.    res = -re
2bf20 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  s;.  }else{.    
2bf30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2bf40 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c  ode==OP_IdxGE ||
2bf50 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2bf60 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65  _IdxGT );.    re
2bf70 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42  s++;.  }.  VdbeB
2bf80 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30  ranchTaken(res>0
2bf90 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ,2);.  if( rc ) 
2bfa0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2bfb0 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72  o_error;.  if( r
2bfc0 65 73 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  es>0 ) goto jump
2bfd0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
2bfe0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
2bff0 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20  estroy P1 P2 P3 
2c000 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
2c010 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62   an entire datab
2c020 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
2c030 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
2c040 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ge in the databa
2c050 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69  se.** file is gi
2c060 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a  ven by P1..**.**
2c070 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
2c080 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e   destroyed is in
2c090 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
2c0a0 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30  se file if P3==0
2c0b0 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74  .  If.** P3==1 t
2c0c0 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f  hen the table to
2c0d0 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20   be clear is in 
2c0e0 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
2c0f0 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74  tabase file.** t
2c100 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  hat is used to s
2c110 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61  tore tables crea
2c120 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  te using CREATE 
2c130 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e  TEMPORARY TABLE.
2c140 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  .**.** If AUTOVA
2c150 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20  CUUM is enabled 
2c160 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69  then it is possi
2c170 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72  ble that another
2c180 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69   root page.** mi
2c190 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74  ght be moved int
2c1a0 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65  o the newly dele
2c1b0 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ted root page in
2c1c0 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61   order to keep a
2c1d0 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73  ll.** root pages
2c1e0 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74   contiguous at t
2c1f0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
2c200 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
2c210 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c  he former.** val
2c220 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70  ue of the root p
2c230 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d  age that moved -
2c240 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72   its value befor
2c250 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72  e the move occur
2c260 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72  red -.** is stor
2c270 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
2c280 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a  2.  If no page .
2c290 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20  ** movement was 
2c2a0 72 65 71 75 69 72 65 64 20 28 62 65 63 61 75 73  required (becaus
2c2b0 65 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  e the table bein
2c2c0 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c  g dropped was al
2c2d0 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61  ready .** the la
2c2e0 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61  st one in the da
2c2f0 74 61 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a  tabase) then a z
2c300 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ero is stored in
2c310 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
2c320 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
2c330 73 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20  s disabled then 
2c340 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
2c350 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2c360 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
2c370 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f   Clear.*/.case O
2c380 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20  P_Destroy: {    
2c390 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e   /* out2 */.  in
2c3a0 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20  t iMoved;.  int 
2c3b0 69 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  iDb;..  assert( 
2c3c0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2c3d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2c3e0 3e 70 31 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20  >p1>1 );.  pOut 
2c3f0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
2c400 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
2c410 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
2c420 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56  ll;.  if( db->nV
2c430 64 62 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56  dbeRead > db->nV
2c440 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20  Destroy+1 ){.   
2c450 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
2c460 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f  KED;.    p->erro
2c470 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f  rAction = OE_Abo
2c480 72 74 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  rt;.    goto abo
2c490 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2c4a0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44  .  }else{.    iD
2c4b0 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  b = pOp->p3;.   
2c4c0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2c4d0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2c4e0 2c 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d  , iDb) );.    iM
2c4f0 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  oved = 0;  /* No
2c500 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2c510 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
2c520 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20  ning. */.    rc 
2c530 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72  = sqlite3BtreeDr
2c540 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  opTable(db->aDb[
2c550 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  iDb].pBt, pOp->p
2c560 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20  1, &iMoved);.   
2c570 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
2c580 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
2c590 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a  ->u.i = iMoved;.
2c5a0 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
2c5b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2c5c0 72 72 6f 72 3b 0a 23 69 66 6e 64 65 66 20 53 51  rror;.#ifndef SQ
2c5d0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
2c5e0 43 55 55 4d 0a 20 20 20 20 69 66 28 20 69 4d 6f  CUUM.    if( iMo
2c5f0 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ved!=0 ){.      
2c600 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
2c610 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d  oved(db, iDb, iM
2c620 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  oved, pOp->p1);.
2c630 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f        /* All OP_
2c640 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f  Destroy operatio
2c650 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20  ns occur on the 
2c660 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20  same btree */.  
2c670 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73 65      assert( rese
2c680 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d  tSchemaOnFault==
2c690 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61  0 || resetSchema
2c6a0 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29  OnFault==iDb+1 )
2c6b0 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53 63 68  ;.      resetSch
2c6c0 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62  emaOnFault = iDb
2c6d0 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  +1;.    }.#endif
2c6e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2c6f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61  ./* Opcode: Clea
2c700 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a  r P1 P2 P3.**.**
2c710 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74   Delete all cont
2c720 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61  ents of the data
2c730 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
2c740 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  dex whose root p
2c750 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61  age.** in the da
2c760 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67  tabase file is g
2c770 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74  iven by P1.  But
2c780 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79  , unlike Destroy
2c790 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f  , do not.** remo
2c7a0 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  ve the table or 
2c7b0 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64  index from the d
2c7c0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
2c7d0 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
2c7e0 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20  ing clear is in 
2c7f0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2c800 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e  e file if P2==0.
2c810 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68    If.** P2==1 th
2c820 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  en the table to 
2c830 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  be clear is in t
2c840 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
2c850 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68  abase file.** th
2c860 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  at is used to st
2c870 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74  ore tables creat
2c880 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  e using CREATE T
2c890 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a  EMPORARY TABLE..
2c8a0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20  **.** If the P3 
2c8b0 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72  value is non-zer
2c8c0 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  o, then the tabl
2c8d0 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75  e referred to mu
2c8e0 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b  st be an.** intk
2c8f0 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c  ey table (an SQL
2c900 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69   table, not an i
2c910 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63  ndex). In this c
2c920 61 73 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e  ase the row chan
2c930 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20  ge .** count is 
2c940 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
2c950 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
2c960 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  s in the table b
2c970 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a  eing cleared. .*
2c980 2a 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74  * If P3 is great
2c990 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68  er than zero, th
2c9a0 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  en the value sto
2c9b0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
2c9c0 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e  P3 is.** also in
2c9d0 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
2c9e0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2c9f0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
2ca00 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a  ng cleared..**.*
2ca10 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74  * See also: Dest
2ca20 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  roy.*/.case OP_C
2ca30 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43  lear: {.  int nC
2ca40 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e  hange;. .  nChan
2ca50 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  ge = 0;.  assert
2ca60 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2ca70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2ca80 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
2ca90 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20  eMask, pOp->p2) 
2caa0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2cab0 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
2cac0 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b  (.      db->aDb[
2cad0 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f  pOp->p2].pBt, pO
2cae0 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20  p->p1, (pOp->p3 
2caf0 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a  ? &nChange : 0).
2cb00 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e    );.  if( pOp->
2cb10 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68  p3 ){.    p->nCh
2cb20 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b  ange += nChange;
2cb30 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
2cb40 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  >0 ){.      asse
2cb50 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
2cb60 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
2cb70 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
2cb80 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
2cb90 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
2cba0 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d     aMem[pOp->p3]
2cbb0 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b  .u.i += nChange;
2cbc0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
2cbd0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2cbe0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2cbf0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2cc00 63 6f 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65  code: ResetSorte
2cc10 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  r P1 * * * *.**.
2cc20 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f  ** Delete all co
2cc30 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20  ntents from the 
2cc40 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
2cc50 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61  or sorter.** tha
2cc60 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72  t is open on cur
2cc70 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  sor P1..**.** Th
2cc80 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77  is opcode only w
2cc90 6f 72 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73  orks for cursors
2cca0 20 75 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e   used for sortin
2ccb0 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20  g and.** opened 
2ccc0 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65  with OP_OpenEphe
2ccd0 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74  meral or OP_Sort
2cce0 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20  erOpen..*/.case 
2ccf0 4f 50 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20  OP_ResetSorter: 
2cd00 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
2cd10 70 43 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20  pC;. .  assert( 
2cd20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2cd30 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2cd40 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2cd50 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2cd60 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2cd70 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28  .  if( isSorter(
2cd80 70 43 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  pC) ){.    sqlit
2cd90 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 73 65  e3VdbeSorterRese
2cda0 74 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70 53 6f  t(db, pC->uc.pSo
2cdb0 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  rter);.  }else{.
2cdc0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2cdd0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2cde0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61  E_BTREE );.    a
2cdf0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68  ssert( pC->isEph
2ce00 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63  emeral );.    rc
2ce10 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
2ce20 6c 65 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f  learTableOfCurso
2ce30 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  r(pC->uc.pCursor
2ce40 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
2ce50 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2ce60 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62  o_error;.  }.  b
2ce70 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2ce80 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20  de: CreateTable 
2ce90 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2cea0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
2ceb0 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a  oot iDb=P1.**.**
2cec0 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
2ced0 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69  table in the mai
2cee0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
2cef0 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
2cf00 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
2cf10 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2cf20 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
2cf30 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
2cf40 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
2cf50 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
2cf60 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
2cf70 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
2cf80 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  ** register P2.*
2cf90 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65  *.** The differe
2cfa0 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 74 61  nce between a ta
2cfb0 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78  ble and an index
2cfc0 20 69 73 20 74 68 69 73 3a 20 20 41 20 74 61 62   is this:  A tab
2cfd0 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20  le must.** have 
2cfe0 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72  a 4-byte integer
2cff0 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76   key and can hav
2d000 65 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61  e arbitrary data
2d010 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  .  An index.** h
2d020 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  as an arbitrary 
2d030 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e  key but no data.
2d040 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
2d050 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a   CreateIndex.*/.
2d060 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
2d070 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a  eIndex P1 P2 * *
2d080 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2d090 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50  r[P2]=root iDb=P
2d0a0 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  1.**.** Allocate
2d0b0 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20   a new index in 
2d0c0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2d0d0 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
2d0e0 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
2d0f0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
2d100 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
2d110 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
2d120 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
2d130 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
2d140 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
2d150 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
2d160 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
2d170 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
2d180 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
2d190 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  n OP_CreateTable
2d1a0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
2d1b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
2d1c0 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e  case OP_CreateIn
2d1d0 64 65 78 3a 20 20 20 20 20 20 20 20 20 20 20 20  dex:            
2d1e0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 63 61 73 65 20  /* out2 */.case 
2d1f0 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20  OP_CreateTable: 
2d200 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
2d210 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f  t2 */.  int pgno
2d220 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20  ;.  int flags;. 
2d230 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f 75   Db *pDb;..  pOu
2d240 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2d250 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67  se(p, pOp);.  pg
2d260 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  no = 0;.  assert
2d270 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2d280 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
2d290 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
2d2a0 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
2d2b0 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29  Mask, pOp->p1) )
2d2c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
2d2d0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
2d2e0 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
2d2f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2d300 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
2d310 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
2d320 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61  ode==OP_CreateTa
2d330 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c  ble ){.    /* fl
2d340 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
2d350 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73  EY; */.    flags
2d360 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b   = BTREE_INTKEY;
2d370 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c  .  }else{.    fl
2d380 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42  ags = BTREE_BLOB
2d390 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  KEY;.  }.  rc = 
2d3a0 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
2d3b0 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74  teTable(pDb->pBt
2d3c0 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b  , &pgno, flags);
2d3d0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2d3e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2d3f0 72 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ror;.  pOut->u.i
2d400 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b   = pgno;.  break
2d410 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2d420 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a  ParseSchema P1 *
2d430 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
2d440 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c  ad and parse all
2d450 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
2d460 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
2d470 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73  table of databas
2d480 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74  e P1.** that mat
2d490 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  ch the WHERE cla
2d4a0 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54  use P4. .**.** T
2d4b0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
2d4c0 65 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  es the parser to
2d4d0 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69   create a new vi
2d4e0 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a  rtual machine,.*
2d4f0 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20  * then runs the 
2d500 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68  new virtual mach
2d510 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73  ine.  It is thus
2d520 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70   a re-entrant op
2d530 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
2d540 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a  _ParseSchema: {.
2d550 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e    int iDb;.  con
2d560 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72  st char *zMaster
2d570 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a  ;.  char *zSql;.
2d580 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44    InitData initD
2d590 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70  ata;..  /* Any p
2d5a0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
2d5b0 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74  t that invokes t
2d5c0 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
2d5d0 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a  hold mutexes.  *
2d5e0 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65  * on every btree
2d5f0 2e 20 20 54 68 69 73 20 69 73 20 61 20 70 72 65  .  This is a pre
2d600 72 65 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e  requisite for in
2d610 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c  voking .  ** sql
2d620 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
2d630 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20  ()..  */.#ifdef 
2d640 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66  SQLITE_DEBUG.  f
2d650 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62  or(iDb=0; iDb<db
2d660 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20  ->nDb; iDb++){. 
2d670 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d     assert( iDb==
2d680 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  1 || sqlite3Btre
2d690 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e  eHoldsMutex(db->
2d6a0 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b  aDb[iDb].pBt) );
2d6b0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69  .  }.#endif..  i
2d6c0 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
2d6d0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
2d6e0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
2d6f0 0a 20 20 61 73 73 65 72 74 28 20 44 62 48 61 73  .  assert( DbHas
2d700 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62  Property(db, iDb
2d710 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  , DB_SchemaLoade
2d720 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20  d) );.  /* Used 
2d730 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f  to be a conditio
2d740 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61  nal */ {.    zMa
2d750 73 74 65 72 20 3d 20 4d 41 53 54 45 52 5f 4e 41  ster = MASTER_NA
2d760 4d 45 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  ME;.    initData
2d770 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e  .db = db;.    in
2d780 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70  itData.iDb = pOp
2d790 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61  ->p1;.    initDa
2d7a0 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70  ta.pzErrMsg = &p
2d7b0 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a  ->zErrMsg;.    z
2d7c0 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Sql = sqlite3MPr
2d7d0 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20  intf(db,.       
2d7e0 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f  "SELECT name, ro
2d7f0 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d  otpage, sql FROM
2d800 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25   '%q'.%s WHERE %
2d810 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  s ORDER BY rowid
2d820 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44  ",.       db->aD
2d830 62 5b 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 2c  b[iDb].zDbSName,
2d840 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70   zMaster, pOp->p
2d850 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53  4.z);.    if( zS
2d860 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  ql==0 ){.      r
2d870 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
2d880 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65  _BKPT;.    }else
2d890 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
2d8a0 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30  db->init.busy==0
2d8b0 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e   );.      db->in
2d8c0 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20  it.busy = 1;.   
2d8d0 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d     initData.rc =
2d8e0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
2d8f0 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d    assert( !db->m
2d900 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
2d910 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
2d920 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c  3_exec(db, zSql,
2d930 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
2d940 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c  back, &initData,
2d950 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
2d960 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72  c==SQLITE_OK ) r
2d970 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b  c = initData.rc;
2d980 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
2d990 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a  Free(db, zSql);.
2d9a0 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
2d9b0 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  usy = 0;.    }. 
2d9c0 20 7d 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20   }.  if( rc ){. 
2d9d0 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41     sqlite3ResetA
2d9e0 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
2d9f0 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 69  ction(db);.    i
2da00 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc==SQLITE_NO
2da10 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  MEM ){.      got
2da20 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a  o no_mem;.    }.
2da30 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
2da40 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
2da50 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23  .  break;  .}..#
2da60 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2da70 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
2da80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64  ./* Opcode: Load
2da90 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20  Analysis P1 * * 
2daa0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74  * *.**.** Read t
2dab0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
2dac0 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61  table for databa
2dad0 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74  se P1 and load t
2dae0 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66  he content.** of
2daf0 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f   that table into
2db00 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e   the internal in
2db10 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20  dex hash table. 
2db20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
2db30 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73  .** the analysis
2db40 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
2db50 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73   preparing all s
2db60 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65  ubsequent querie
2db70 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f  s..*/.case OP_Lo
2db80 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20  adAnalysis: {.  
2db90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2dba0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
2dbb0 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20  ->nDb );.  rc = 
2dbc0 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
2dbd0 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  oad(db, pOp->p1)
2dbe0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
2dbf0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2dc00 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 20 20  rror;.  break;  
2dc10 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  .}.#endif /* !de
2dc20 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2dc30 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f  T_ANALYZE) */../
2dc40 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61  * Opcode: DropTa
2dc50 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ble P1 * * P4 *.
2dc60 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
2dc70 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
2dc80 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
2dc90 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
2dca0 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65  ibe.** the table
2dcb0 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
2dcc0 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
2dcd0 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
2dce0 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72  a table.** is dr
2dcf0 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
2dd00 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
2dd10 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72  oy opcode) in or
2dd20 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20  der to keep .** 
2dd30 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
2dd40 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2dd50 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
2dd60 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
2dd70 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
2dd80 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62  .case OP_DropTab
2dd90 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  le: {.  sqlite3U
2dda0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
2ddb0 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ble(db, pOp->p1,
2ddc0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
2ddd0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2dde0 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31  de: DropIndex P1
2ddf0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2de00 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
2de10 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
2de20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
2de30 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
2de40 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64   the index named
2de50 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
2de60 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
2de70 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64  led after an ind
2de80 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  ex.** is dropped
2de90 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
2dea0 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
2deb0 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65  code).** in orde
2dec0 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
2ded0 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
2dee0 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
2def0 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
2df00 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
2df10 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
2df20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a  OP_DropIndex: {.
2df30 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
2df40 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62  ndDeleteIndex(db
2df50 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2df60 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
2df70 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
2df80 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a  opTrigger P1 * *
2df90 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
2dfa0 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
2dfb0 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
2dfc0 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
2dfd0 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
2dfe0 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50   trigger named P
2dff0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
2e000 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
2e010 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65  d after a trigge
2e020 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  r.** is dropped 
2e030 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
2e040 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
2e050 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f  ode) in order to
2e060 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e   keep .** the in
2e070 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
2e080 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
2e090 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
2e0a0 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
2e0b0 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
2e0c0 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20  OP_DropTrigger: 
2e0d0 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
2e0e0 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
2e0f0 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  r(db, pOp->p1, p
2e100 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
2e110 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
2e120 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
2e130 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f  GRITY_CHECK./* O
2e140 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79  pcode: Integrity
2e150 43 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ck P1 P2 P3 P4 P
2e160 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e  5.**.** Do an an
2e170 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75  alysis of the cu
2e180 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74  rrently open dat
2e190 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e  abase.  Store in
2e1a0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
2e1b0 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65  the text of an e
2e1c0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73  rror message des
2e1d0 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62  cribing any prob
2e1e0 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70  lems..** If no p
2e1f0 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e  roblems are foun
2e200 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  d, store a NULL 
2e210 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
2e220 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
2e230 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
2e240 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
2e250 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72  r of allowed err
2e260 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20  ors..** At most 
2e270 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77  reg(P3) errors w
2e280 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e  ill be reported.
2e290 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
2e2a0 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73  ds, the analysis
2e2b0 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61   stops as soon a
2e2c0 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73  s reg(P1) errors
2e2d0 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20   are .** seen.  
2e2e0 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74  Reg(P1) is updat
2e2f0 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62  ed with the numb
2e300 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  er of errors rem
2e310 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  aining..**.** Th
2e320 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
2e330 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65  ers of all table
2e340 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
2e350 65 20 61 72 65 20 69 6e 74 65 67 65 72 73 0a 2a  e are integers.*
2e360 2a 20 73 74 6f 72 65 64 20 69 6e 20 50 34 5f 49  * stored in P4_I
2e370 4e 54 41 52 52 41 59 20 61 72 67 75 6d 65 6e 74  NTARRAY argument
2e380 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
2e390 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63   not zero, the c
2e3a0 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20  heck is done on 
2e3b0 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
2e3c0 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20  tabase.** file, 
2e3d0 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74  not the main dat
2e3e0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
2e3f0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
2e400 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
2e410 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  nt the integrity
2e420 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a  _check pragma..*
2e430 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72  /.case OP_Integr
2e440 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e  ityCk: {.  int n
2e450 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75  Root;      /* Nu
2e460 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74  mber of tables t
2e470 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65  o check.  (Numbe
2e480 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e  r of root pages.
2e490 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f  ) */.  int *aRoo
2e4a0 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  t;     /* Array 
2e4b0 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62  of rootpage numb
2e4c0 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74  ers for tables t
2e4d0 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a  o be checked */.
2e4e0 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
2e4f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
2e500 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a  rrors reported *
2e510 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  /.  char *z;    
2e520 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
2e530 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20  he error report 
2e540 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b  */.  Mem *pnErr;
2e550 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
2e560 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f   keeping track o
2e570 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
2e580 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  ng */..  assert(
2e590 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
2e5a0 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e  .  nRoot = pOp->
2e5b0 70 32 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 70 4f  p2;.  aRoot = pO
2e5c0 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 61 73 73 65  p->p4.ai;.  asse
2e5d0 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20  rt( nRoot>0 );. 
2e5e0 20 61 73 73 65 72 74 28 20 61 52 6f 6f 74 5b 6e   assert( aRoot[n
2e5f0 52 6f 6f 74 5d 3d 3d 30 20 29 3b 0a 20 20 61 73  Root]==0 );.  as
2e600 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
2e610 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
2e620 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
2e630 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20  sor) );.  pnErr 
2e640 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2e650 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
2e660 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  rr->flags & MEM_
2e670 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Int)!=0 );.  ass
2e680 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
2e690 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2e6a0 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
2e6b0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2e6c0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2e6d0 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44  ( pOp->p5<db->nD
2e6e0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
2e6f0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
2e700 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29  eeMask, pOp->p5)
2e710 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65   );.  z = sqlite
2e720 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43  3BtreeIntegrityC
2e730 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70  heck(db->aDb[pOp
2e740 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74  ->p5].pBt, aRoot
2e750 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20  , nRoot,.       
2e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e770 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70            (int)p
2e780 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72  nErr->u.i, &nErr
2e790 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20  );.  pnErr->u.i 
2e7a0 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74  -= nErr;.  sqlit
2e7b0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
2e7c0 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45  (pIn1);.  if( nE
2e7d0 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  rr==0 ){.    ass
2e7e0 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d  ert( z==0 );.  }
2e7f0 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b  else if( z==0 ){
2e800 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
2e810 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
2e820 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2e830 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c  Str(pIn1, z, -1,
2e840 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71   SQLITE_UTF8, sq
2e850 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d  lite3_free);.  }
2e860 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
2e870 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
2e880 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
2e890 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20  eEncoding(pIn1, 
2e8a0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65  encoding);.  bre
2e8b0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2e8c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
2e8d0 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a  GRITY_CHECK */..
2e8e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
2e8f0 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  tAdd P1 P2 * * *
2e900 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
2e910 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a  wset(P1)=r[P2].*
2e920 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20  *.** Insert the 
2e930 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65  integer value he
2e940 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50  ld by register P
2e950 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e  2 into a boolean
2e960 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69   index.** held i
2e970 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
2e980 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f  *.** An assertio
2e990 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73  n fails if P2 is
2e9a0 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e   not an integer.
2e9b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
2e9c0 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f  etAdd: {       /
2e9d0 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20  * in1, in2 */.  
2e9e0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2e9f0 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
2ea00 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2ea10 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
2ea20 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
2ea30 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  )!=0 );.  if( (p
2ea40 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2ea50 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
2ea60 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ea70 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
2ea80 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
2ea90 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2eaa0 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
2eab0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c  o_mem;.  }.  sql
2eac0 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
2ead0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2eae0 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn2->u.i);.  
2eaf0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2eb00 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20  ode: RowSetRead 
2eb10 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
2eb20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
2eb30 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a  rowset(P1).**.**
2eb40 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61   Extract the sma
2eb50 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d  llest value from
2eb60 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50   boolean index P
2eb70 31 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76  1 and put that v
2eb80 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  alue into.** reg
2eb90 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69  ister P3.  Or, i
2eba0 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  f boolean index 
2ebb0 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  P1 is initially 
2ebc0 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a  empty, leave P3.
2ebd0 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  ** unchanged and
2ebe0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2ebf0 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  tion P2..*/.case
2ec00 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20   OP_RowSetRead: 
2ec10 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
2ec20 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in1, out3 */.  
2ec30 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31  i64 val;..  pIn1
2ec40 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2ec50 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
2ec60 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2ec70 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71  et)==0 .   || sq
2ec80 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
2ec90 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2eca0 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20   &val)==0.  ){. 
2ecb0 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61     /* The boolea
2ecc0 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  n index is empty
2ecd0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
2ece0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
2ecf0 6e 31 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  n1);.    VdbeBra
2ed00 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20  nchTaken(1,2);. 
2ed10 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
2ed20 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
2ed30 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65  _interrupt;.  }e
2ed40 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
2ed50 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
2ed60 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
2ed70 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2ed80 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73  aken(0,2);.    s
2ed90 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2eda0 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
2edb0 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a  >p3], val);.  }.
2edc0 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
2edd0 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _interrupt;.}../
2ede0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
2edf0 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34  Test P1 P2 P3 P4
2ee00 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2ee10 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74   r[P3] in rowset
2ee20 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  (P1) goto P2.**.
2ee30 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69  ** Register P3 i
2ee40 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c  s assumed to hol
2ee50 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  d a 64-bit integ
2ee60 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67  er value. If reg
2ee70 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74  ister P1.** cont
2ee80 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62  ains a RowSet ob
2ee90 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f  ject and that Ro
2eea0 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74  wSet object cont
2eeb0 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ains.** the valu
2eec0 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75  e held in P3, ju
2eed0 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  mp to register P
2eee0 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e  2. Otherwise, in
2eef0 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65  sert the.** inte
2ef00 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74  ger in P3 into t
2ef10 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f  he RowSet and co
2ef20 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65  ntinue on to the
2ef30 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e  .** next opcode.
2ef40 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65  .**.** The RowSe
2ef50 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69  t object is opti
2ef60 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61  mized for the ca
2ef70 73 65 20 77 68 65 72 65 20 73 75 63 63 65 73 73  se where success
2ef80 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69  ive sets.** of i
2ef90 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65 20 65  ntegers, where e
2efa0 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73  ach set contains
2efb0 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20   no duplicates. 
2efc0 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76  Each set.** of v
2efd0 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69 66  alues is identif
2efe0 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20  ied by a unique 
2eff0 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69  P4 value. The fi
2f000 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20  rst set.** must 
2f010 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20  have P4==0, the 
2f020 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e  final set P4=-1.
2f030 20 20 50 34 20 6d 75 73 74 20 62 65 20 65 69 74    P4 must be eit
2f040 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e  her -1 or.** non
2f050 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20  -negative.  For 
2f060 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c  non-negative val
2f070 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74  ues of P4 only t
2f080 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69  he lower 4.** bi
2f090 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61  ts are significa
2f0a0 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61  nt..**.** This a
2f0b0 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69  llows optimizati
2f0c0 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34  ons: (a) when P4
2f0d0 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ==0 there is no 
2f0e0 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20  need to test.** 
2f0f0 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63  the rowset objec
2f100 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20  t for P3, as it 
2f110 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f  is guaranteed no
2f120 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c  t to contain it,
2f130 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d  .** (b) when P4=
2f140 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20  =-1 there is no 
2f150 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74  need to insert t
2f160 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20  he value, as it 
2f170 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65  will.** never be
2f180 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64   tested for, and
2f190 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75   (c) when a valu
2f1a0 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f  e that is part o
2f1b0 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e  f set X is.** in
2f1c0 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73  serted, there is
2f1d0 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72   no need to sear
2f1e0 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ch to see if the
2f1f0 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a   same value was.
2f200 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e  ** previously in
2f210 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
2f220 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66  f set X (only if
2f230 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73   it was previous
2f240 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61  ly.** inserted a
2f250 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f  s part of some o
2f260 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61  ther set)..*/.ca
2f270 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74  se OP_RowSetTest
2f280 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
2f290 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2f2a0 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
2f2b0 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65  nt iSet;.  int e
2f2c0 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d  xists;..  pIn1 =
2f2d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2f2e0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
2f2f0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74  pOp->p3];.  iSet
2f300 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
2f310 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
2f320 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a  ags&MEM_Int );..
2f330 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
2f340 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20   anything other 
2f350 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62  than a rowset ob
2f360 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63  ject in memory c
2f370 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c  ell P1,.  ** del
2f380 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69  ete it now and i
2f390 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74  nitialize P1 wit
2f3a0 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65  h an empty rowse
2f3b0 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49  t.  */.  if( (pI
2f3c0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2f3d0 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20  RowSet)==0 ){.  
2f3e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2f3f0 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b  SetRowSet(pIn1);
2f400 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
2f410 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2f420 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  et)==0 ) goto no
2f430 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  _mem;.  }..  ass
2f440 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
2f450 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
2f460 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31  assert( iSet==-1
2f470 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20   || iSet>=0 );. 
2f480 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20   if( iSet ){.   
2f490 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65   exists = sqlite
2f4a0 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31  3RowSetTest(pIn1
2f4b0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65  ->u.pRowSet, iSe
2f4c0 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  t, pIn3->u.i);. 
2f4d0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2f4e0 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b  en(exists!=0,2);
2f4f0 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20  .    if( exists 
2f500 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2f510 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65  2;.  }.  if( iSe
2f520 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  t>=0 ){.    sqli
2f530 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
2f540 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2f550 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d   pIn3->u.i);.  }
2f560 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
2f570 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2f580 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70  T_TRIGGER../* Op
2f590 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31  code: Program P1
2f5a0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
2f5b0 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 74  ** Execute the t
2f5c0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70  rigger program p
2f5d0 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79 70  assed as P4 (typ
2f5e0 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29  e P4_SUBPROGRAM)
2f5f0 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74  . .**.** P1 cont
2f600 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
2f610 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   of the memory c
2f620 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ell that contain
2f630 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f  s the first memo
2f640 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61  ry .** cell in a
2f650 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65  n array of value
2f660 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d 65  s used as argume
2f670 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70  nts to the sub-p
2f680 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63  rogram. P2 .** c
2f690 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
2f6a0 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69  ess to jump to i
2f6b0 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  f the sub-progra
2f6c0 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f  m throws an IGNO
2f6d0 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e  RE .** exception
2f6e0 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53 45   using the RAISE
2f6f0 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67  () function. Reg
2f700 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e  ister P3 contain
2f710 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a  s the address .*
2f720 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65  * of a memory ce
2f730 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65 20  ll in this (the 
2f740 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20  parent) VM that 
2f750 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63  is used to alloc
2f760 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f  ate the .** memo
2f770 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ry required by t
2f780 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20 72  he sub-vdbe at r
2f790 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34  untime..**.** P4
2f7a0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2f7b0 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69   the VM containi
2f7c0 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ng the trigger p
2f7d0 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66  rogram..**.** If
2f7e0 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P5 is non-zero,
2f7f0 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
2f800 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69  program invocati
2f810 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a  on is enabled..*
2f820 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61  /.case OP_Progra
2f830 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
2f840 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ump */.  int nMe
2f850 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
2f860 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
2f870 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 66  mory registers f
2f880 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
2f890 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20  /.  int nByte;  
2f8a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
2f8b0 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20  ytes of runtime 
2f8c0 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66  space required f
2f8d0 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
2f8e0 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20  /.  Mem *pRt;   
2f8f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
2f900 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63  egister to alloc
2f910 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63  ate runtime spac
2f920 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  e */.  Mem *pMem
2f930 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2f940 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61 74  * Used to iterat
2f950 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79  e through memory
2f960 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20   cells */.  Mem 
2f970 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
2f980 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f      /* Last memo
2f990 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61  ry cell in new a
2f9a0 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72  rray */.  VdbeFr
2f9b0 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
2f9c0 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72    /* New vdbe fr
2f9d0 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20 69  ame to execute i
2f9e0 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  n */.  SubProgra
2f9f0 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
2fa00 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f  * Sub-program to
2fa10 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f   execute */.  vo
2fa20 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20  id *t;          
2fa30 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69        /* Token i
2fa40 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67  dentifying trigg
2fa50 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61  er */..  pProgra
2fa60 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f  m = pOp->p4.pPro
2fa70 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61  gram;.  pRt = &a
2fa80 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2fa90 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2faa0 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20  ->nOp>0 );.  .  
2fab0 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c 61  /* If the p5 fla
2fac0 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  g is clear, then
2fad0 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
2fae0 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
2faf0 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62  s is .  ** disab
2fb00 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64  led for backward
2fb10 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  s compatibility 
2fb20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74 68  (p5 is set if th
2fb30 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20  is sub-program. 
2fb40 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20   ** is really a 
2fb50 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66  trigger, not a f
2fb60 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f  oreign key actio
2fb70 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20  n, and the flag 
2fb80 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65  set.  ** and cle
2fb90 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52 41  ared by the "PRA
2fba0 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74 72  GMA recursive_tr
2fbb0 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20  iggers" command 
2fbc0 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20  is clear)..  ** 
2fbd0 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75  .  ** It is recu
2fbe0 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
2fbf0 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61 74   of triggers, at
2fc00 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20   the SQL level, 
2fc10 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69  that is .  ** di
2fc20 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20  sabled. In some 
2fc30 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74  cases a single t
2fc40 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72  rigger may gener
2fc50 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ate more than on
2fc60 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72  e .  ** SubProgr
2fc70 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67 67  am (if the trigg
2fc80 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75 74  er may be execut
2fc90 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61  ed with more tha
2fca0 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20  n one different 
2fcb0 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43  .  ** ON CONFLIC
2fcc0 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75  T algorithm). Su
2fcd0 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75  bProgram structu
2fce0 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  res associated w
2fcf0 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c  ith a.  ** singl
2fd00 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61  e trigger all ha
2fd10 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  ve the same valu
2fd20 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f  e for the SubPro
2fd30 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a  gram.token .  **
2fd40 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20   variable.  */. 
2fd50 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
2fd60 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d      t = pProgram
2fd70 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72  ->token;.    for
2fd80 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
2fd90 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46 72  e; pFrame && pFr
2fda0 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70  ame->token!=t; p
2fdb0 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
2fdc0 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20  arent);.    if( 
2fdd0 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a  pFrame ) break;.
2fde0 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46    }..  if( p->nF
2fdf0 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74  rame>=db->aLimit
2fe00 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52  [SQLITE_LIMIT_TR
2fe10 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a  IGGER_DEPTH] ){.
2fe20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2fe30 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74  ERROR;.    sqlit
2fe40 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
2fe50 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20  too many levels 
2fe60 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72  of trigger recur
2fe70 73 69 6f 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f  sion");.    goto
2fe80 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2fe90 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52  ror;.  }..  /* R
2fea0 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75  egister pRt is u
2feb0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
2fec0 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
2fed0 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61   to save the sta
2fee0 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63  te.  ** of the c
2fef0 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20  urrent program, 
2ff00 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  and the memory r
2ff10 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69  equired at runti
2ff20 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20  me to execute.  
2ff30 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ** the trigger p
2ff40 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20  rogram. If this 
2ff50 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e  trigger has been
2ff60 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74   fired before, t
2ff70 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73  hen pRt .  ** is
2ff80 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74   already allocat
2ff90 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
2ffa0 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61  t must be initia
2ffb0 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28  lized.  */.  if(
2ffc0 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d   (pRt->flags&MEM
2ffd0 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20  _Frame)==0 ){.  
2ffe0 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e    /* SubProgram.
2fff0 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74  nMem is set to t
30000 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
30010 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62  ory cells used b
30020 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72  y the .    ** pr
30030 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20  ogram stored in 
30040 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20  SubProgram.aOp. 
30050 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65  As well as these
30060 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20  , one memory.   
30070 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75   ** cell is requ
30080 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75  ired for each cu
30090 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65  rsor used by the
300a0 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f   program. Set lo
300b0 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61  cal.    ** varia
300c0 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61  ble nMem (and la
300d0 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e  ter, VdbeFrame.n
300e0 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69  ChildMem) to thi
300f0 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  s value..    */.
30100 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67      nMem = pProg
30110 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f  ram->nMem + pPro
30120 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
30130 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e 30 20 29  assert( nMem>0 )
30140 3b 0a 20 20 20 20 69 66 28 20 70 50 72 6f 67 72  ;.    if( pProgr
30150 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29 20 6e 4d  am->nCsr==0 ) nM
30160 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79 74 65 20  em++;.    nByte 
30170 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  = ROUND8(sizeof(
30180 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20  VdbeFrame)).    
30190 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d            + nMem
301a0 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20   * sizeof(Mem). 
301b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70               + p
301c0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20  Program->nCsr * 
301d0 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
301e0 72 20 2a 29 3b 0a 20 20 20 20 70 46 72 61 6d 65  r *);.    pFrame
301f0 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
30200 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65  ocZero(db, nByte
30210 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61  );.    if( !pFra
30220 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  me ){.      goto
30230 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20   no_mem;.    }. 
30240 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
30250 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20  mRelease(pRt);. 
30260 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20     pRt->flags = 
30270 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70  MEM_Frame;.    p
30280 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70  Rt->u.pFrame = p
30290 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61  Frame;..    pFra
302a0 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70  me->v = p;.    p
302b0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
302c0 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72   = nMem;.    pFr
302d0 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d  ame->nChildCsr =
302e0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
302f0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20  .    pFrame->pc 
30300 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
30310 70 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  p);.    pFrame->
30320 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
30330 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d      pFrame->nMem
30340 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20   = p->nMem;.    
30350 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20  pFrame->apCsr = 
30360 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46  p->apCsr;.    pF
30370 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  rame->nCursor = 
30380 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20  p->nCursor;.    
30390 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d  pFrame->aOp = p-
303a0 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65  >aOp;.    pFrame
303b0 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a  ->nOp = p->nOp;.
303c0 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65      pFrame->toke
303d0 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  n = pProgram->to
303e0 6b 65 6e 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ken;.#ifdef SQLI
303f0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
30400 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 70 46  CANSTATUS.    pF
30410 72 61 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70  rame->anExec = p
30420 2d 3e 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66  ->anExec;.#endif
30430 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64  ..    pEnd = &Vd
30440 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
30450 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  e)[pFrame->nChil
30460 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70  dMem];.    for(p
30470 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d  Mem=VdbeFrameMem
30480 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d  (pFrame); pMem!=
30490 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20  pEnd; pMem++){. 
304a0 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73       pMem->flags
304b0 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
304c0 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62  ;.      pMem->db
304d0 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d   = db;.    }.  }
304e0 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65  else{.    pFrame
304f0 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65   = pRt->u.pFrame
30500 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
30510 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72  rogram->nMem+pPr
30520 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
30530 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a  ame->nChildMem .
30540 20 20 20 20 20 20 20 20 7c 7c 20 28 70 50 72 6f          || (pPro
30550 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26 26  gram->nCsr==0 &&
30560 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b   pProgram->nMem+
30570 31 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  1==pFrame->nChil
30580 64 4d 65 6d 29 20 29 3b 0a 20 20 20 20 61 73 73  dMem) );.    ass
30590 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
305a0 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
305b0 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73  ildCsr );.    as
305c0 73 65 72 74 28 20 28 69 6e 74 29 28 70 4f 70 20  sert( (int)(pOp 
305d0 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e  - aOp)==pFrame->
305e0 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e  pc );.  }..  p->
305f0 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61  nFrame++;.  pFra
30600 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d  me->pParent = p-
30610 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d  >pFrame;.  pFram
30620 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  e->lastRowid = l
30630 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61  astRowid;.  pFra
30640 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d  me->nChange = p-
30650 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46 72 61  >nChange;.  pFra
30660 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20  me->nDbChange = 
30670 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a  p->db->nChange;.
30680 20 20 61 73 73 65 72 74 28 20 70 46 72 61 6d 65    assert( pFrame
30690 2d 3e 70 41 75 78 44 61 74 61 3d 3d 30 20 29 3b  ->pAuxData==0 );
306a0 0a 20 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44  .  pFrame->pAuxD
306b0 61 74 61 20 3d 20 70 2d 3e 70 41 75 78 44 61 74  ata = p->pAuxDat
306c0 61 3b 0a 20 20 70 2d 3e 70 41 75 78 44 61 74 61  a;.  p->pAuxData
306d0 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e   = 0;.  p->nChan
306e0 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72  ge = 0;.  p->pFr
306f0 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20  ame = pFrame;.  
30700 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d  p->aMem = aMem =
30710 20 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46   VdbeFrameMem(pF
30720 72 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d  rame);.  p->nMem
30730 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c   = pFrame->nChil
30740 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73  dMem;.  p->nCurs
30750 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65  or = (u16)pFrame
30760 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70  ->nChildCsr;.  p
30770 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43  ->apCsr = (VdbeC
30780 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70  ursor **)&aMem[p
30790 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 2d 3e 61 4f  ->nMem];.  p->aO
307a0 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72  p = aOp = pProgr
307b0 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f  am->aOp;.  p->nO
307c0 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  p = pProgram->nO
307d0 70 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  p;.#ifdef SQLITE
307e0 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
307f0 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e 45  NSTATUS.  p->anE
30800 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  xec = 0;.#endif.
30810 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d 31 5d    pOp = &aOp[-1]
30820 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ;..  break;.}../
30830 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20  * Opcode: Param 
30840 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
30850 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
30860 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65   only ever prese
30870 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61  nt in sub-progra
30880 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68  ms called via th
30890 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d  e .** OP_Program
308a0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f   instruction. Co
308b0 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72 65  py a value curre
308c0 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ntly stored in a
308d0 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
308e0 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
308f0 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74  (parent) frame t
30900 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65  o cell P2 in the
30910 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20   current frames 
30920 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61 63  .** address spac
30930 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  e. This is used 
30940 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
30950 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74 68  ams to access th
30960 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20  e new.* .** and 
30970 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a  old.* values..**
30980 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73 20  .** The address 
30990 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74  of the cell in t
309a0 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20  he parent frame 
309b0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
309c0 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76   adding.** the v
309d0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
309e0 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76  rgument to the v
309f0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
30a00 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a  rgument to the.*
30a10 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  * calling OP_Pro
30a20 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
30a30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
30a40 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  am: {           
30a50 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
30a60 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
30a70 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f    Mem *pIn;.  pO
30a80 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
30a90 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
30aa0 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d  Frame = p->pFram
30ab0 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61  e;.  pIn = &pFra
30ac0 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
30ad0 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70   + pFrame->aOp[p
30ae0 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20  Frame->pc].p1]; 
30af0 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65    .  sqlite3Vdbe
30b00 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
30b10 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70  Out, pIn, MEM_Ep
30b20 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  hem);.  break;.}
30b30 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e  ..#endif /* #ifn
30b40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30b50 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e  TRIGGER */..#ifn
30b60 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30b70 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f  FOREIGN_KEY./* O
30b80 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72  pcode: FkCounter
30b90 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
30ba0 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b  Synopsis: fkctr[
30bb0 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e  P1]+=P2.**.** In
30bc0 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74  crement a "const
30bd0 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62  raint counter" b
30be0 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20  y P2 (P2 may be 
30bf0 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69  negative or posi
30c00 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20  tive)..** If P1 
30c10 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
30c20 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
30c30 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  aint counter is 
30c40 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20  incremented .** 
30c50 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67  (deferred foreig
30c60 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
30c70 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  s). Otherwise, i
30c80 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P1 is zero, th
30c90 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  e .** statement 
30ca0 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
30cb0 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74  mented (immediat
30cc0 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
30cd0 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63  nstraints)..*/.c
30ce0 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72  ase OP_FkCounter
30cf0 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c  : {.  if( db->fl
30d00 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66  ags & SQLITE_Def
30d10 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d  erFKs ){.    db-
30d20 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
30d30 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
30d40 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
30d50 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  1 ){.    db->nDe
30d60 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f  ferredCons += pO
30d70 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p2;.  }else{.
30d80 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72      p->nFkConstr
30d90 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  aint += pOp->p2;
30da0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
30db0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66  ./* Opcode: FkIf
30dc0 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a  Zero P1 P2 * * *
30dd0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
30de0 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f   fkctr[P1]==0 go
30df0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
30e00 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69 66   opcode tests if
30e10 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63   a foreign key c
30e20 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
30e30 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a  r is currently z
30e40 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a  ero..** If so, j
30e50 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
30e60 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  on P2. Otherwise
30e70 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
30e80 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69  o the next .** i
30e90 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
30ea0 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
30eb0 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75  ero, then the ju
30ec0 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
30ed0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
30ee0 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a  traint-counter.*
30ef0 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f  * is zero (the o
30f00 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64  ne that counts d
30f10 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
30f20 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20  nt violations). 
30f30 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f  If P1 is.** zero
30f40 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  , the jump is ta
30f50 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74 65  ken if the state
30f60 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d  ment constraint-
30f70 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a  counter is zero.
30f80 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ** (immediate fo
30f90 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
30fa0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
30fb0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49  ..*/.case OP_FkI
30fc0 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  fZero: {        
30fd0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
30fe0 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
30ff0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
31000 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  (db->nDeferredCo
31010 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  ns==0 && db->nDe
31020 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
31030 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62  , 2);.    if( db
31040 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
31050 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
31060 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
31070 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
31080 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
31090 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d  beBranchTaken(p-
310a0 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d  >nFkConstraint==
310b0 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
310c0 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29  edImmCons==0, 2)
310d0 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b  ;.    if( p->nFk
310e0 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26  Constraint==0 &&
310f0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
31100 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20  mCons==0 ) goto 
31110 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
31120 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
31130 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
31140 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
31150 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  _KEY */..#ifndef
31160 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
31170 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70  OINCREMENT./* Op
31180 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20  code: MemMax P1 
31190 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
311a0 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28  psis: r[P1]=max(
311b0 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a  r[P1],r[P2]).**.
311c0 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73  ** P1 is a regis
311d0 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
311e0 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d  frame of this VM
311f0 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65   (the root frame
31200 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74   is.** different
31210 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
31220 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20  t frame if this 
31230 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62  instruction is b
31240 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a  eing executed.**
31250 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72   within a sub-pr
31260 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20  ogram). Set the 
31270 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
31280 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
31290 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63  mum of .** its c
312a0 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64  urrent value and
312b0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
312c0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
312d0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
312e0 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f  n throws an erro
312f0 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  r if the memory 
31300 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74  cell is not init
31310 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65  ially.** an inte
31320 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
31330 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20  MemMax: {       
31340 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
31350 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
31360 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
31370 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  ){.    for(pFram
31380 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
31390 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46  ame->pParent; pF
313a0 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
313b0 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20  rent);.    pIn1 
313c0 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
313d0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73  pOp->p1];.  }els
313e0 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61  e{.    pIn1 = &a
313f0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
31400 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  }.  assert( memI
31410 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
31420 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
31430 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
31440 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
31450 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
31460 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
31470 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69  erify(pIn2);.  i
31480 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e  f( pIn1->u.i<pIn
31490 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e  2->u.i){.    pIn
314a0 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75  1->u.i = pIn2->u
314b0 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  .i;.  }.  break;
314c0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
314d0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
314e0 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  REMENT */../* Op
314f0 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50  code: IfPos P1 P
31500 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
31510 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30  psis: if r[P1]>0
31520 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c   then r[P1]-=P3,
31530 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
31540 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
31550 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
31560 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  er..** If the va
31570 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
31580 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74  P1 is 1 or great
31590 65 72 2c 20 73 75 62 74 72 61 63 74 20 50 33 20  er, subtract P3 
315a0 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76 61 6c 75  from the.** valu
315b0 65 20 69 6e 20 50 31 20 61 6e 64 20 6a 75 6d 70  e in P1 and jump
315c0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66   to P2..**.** If
315d0 20 74 68 65 20 69 6e 69 74 69 61 6c 20 76 61 6c   the initial val
315e0 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
315f0 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31  1 is less than 1
31600 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
31610 6c 75 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64  lue is unchanged
31620 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 70 61 73   and control pas
31630 73 65 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  ses through to t
31640 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
31650 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
31660 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20  IfPos: {        
31670 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
31680 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
31690 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
316a0 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
316b0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65  EM_Int );.  Vdbe
316c0 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e  BranchTaken( pIn
316d0 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20  1->u.i>0, 2);.  
316e0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20  if( pIn1->u.i>0 
316f0 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
31700 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20   -= pOp->p3;.   
31710 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
31720 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
31730 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66  ../* Opcode: Off
31740 73 65 74 4c 69 6d 69 74 20 50 31 20 50 32 20 50  setLimit P1 P2 P
31750 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
31760 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68  s: if r[P1]>0 th
31770 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d  en r[P2]=r[P1]+m
31780 61 78 28 30 2c 72 5b 50 33 5d 29 20 65 6c 73 65  ax(0,r[P3]) else
31790 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a   r[P2]=(-1).**.*
317a0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 70 65  * This opcode pe
317b0 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c  rforms a commonl
317c0 79 20 75 73 65 64 20 63 6f 6d 70 75 74 61 74 69  y used computati
317d0 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
317e0 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e 64 20  th.** LIMIT and 
317f0 4f 46 46 53 45 54 20 70 72 6f 63 65 73 73 2e 20  OFFSET process. 
31800 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20 74 68 65   r[P1] holds the
31810 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65 72 2e 20   limit counter. 
31820 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20   r[P3].** holds 
31830 74 68 65 20 6f 66 66 73 65 74 20 63 6f 75 6e 74  the offset count
31840 65 72 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 20  er.  The opcode 
31850 63 6f 6d 70 75 74 65 73 20 74 68 65 20 63 6f 6d  computes the com
31860 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a 2a 20 6f  bined value.** o
31870 66 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20  f the LIMIT and 
31880 4f 46 46 53 45 54 20 61 6e 64 20 73 74 6f 72 65  OFFSET and store
31890 73 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 20  s that value in 
318a0 72 5b 50 32 5d 2e 20 20 54 68 65 20 72 5b 50 32  r[P2].  The r[P2
318b0 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f 6d 70 75  ].** value compu
318c0 74 65 64 20 69 73 20 74 68 65 20 74 6f 74 61 6c  ted is the total
318d0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
318e0 74 68 61 74 20 77 69 6c 6c 20 6e 65 65 64 20 74  that will need t
318f0 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74 65 64 20  o be.** visited 
31900 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70  in order to comp
31910 6c 65 74 65 20 74 68 65 20 71 75 65 72 79 2e 0a  lete the query..
31920 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33 5d 20 69  **.** If r[P3] i
31930 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69  s zero or negati
31940 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  ve, that means t
31950 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53 45  here is no OFFSE
31960 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69  T.** and r[P2] i
31970 73 20 73 65 74 20 74 6f 20 62 65 20 74 68 65 20  s set to be the 
31980 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c 49 4d  value of the LIM
31990 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a  IT, r[P1]..**.**
319a0 20 69 66 20 72 5b 50 31 5d 20 69 73 20 7a 65 72   if r[P1] is zer
319b0 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74  o or negative, t
319c0 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20  hat means there 
319d0 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61  is no LIMIT.** a
319e0 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20  nd r[P2] is set 
319f0 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74  to -1. .**.** Ot
31a00 68 65 72 77 69 73 65 2c 20 72 5b 50 32 5d 20 69  herwise, r[P2] i
31a10 73 20 73 65 74 20 74 6f 20 74 68 65 20 73 75 6d  s set to the sum
31a20 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64 20 72 5b   of r[P1] and r[
31a30 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  P3]..*/.case OP_
31a40 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20 7b 20 20  OffsetLimit: {  
31a50 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 2c 20    /* in1, out2, 
31a60 69 6e 33 20 2a 2f 0a 20 20 69 36 34 20 78 3b 0a  in3 */.  i64 x;.
31a70 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
31a80 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
31a90 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
31aa0 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
31ab0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
31ac0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
31ad0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
31ae0 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
31af0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
31b00 4d 5f 49 6e 74 20 29 3b 0a 20 20 78 20 3d 20 70  M_Int );.  x = p
31b10 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20  In1->u.i;.  if( 
31b20 78 3c 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 41  x<=0 || sqlite3A
31b30 64 64 49 6e 74 36 34 28 26 78 2c 20 70 49 6e 33  ddInt64(&x, pIn3
31b40 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e  ->u.i>0?pIn3->u.
31b50 69 3a 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 49  i:0) ){.    /* I
31b60 66 20 74 68 65 20 4c 49 4d 49 54 20 69 73 20 6c  f the LIMIT is l
31b70 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
31b80 6c 20 74 6f 20 7a 65 72 6f 2c 20 6c 6f 6f 70 20  l to zero, loop 
31b90 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73 0a 20  forever.  This. 
31ba0 20 20 20 2a 2a 20 69 73 20 64 6f 63 75 6d 65 6e     ** is documen
31bb0 74 65 64 2e 20 20 42 75 74 20 61 6c 73 6f 2c 20  ted.  But also, 
31bc0 69 66 20 74 68 65 20 4c 49 4d 49 54 2b 4f 46 46  if the LIMIT+OFF
31bd0 53 45 54 20 65 78 63 65 65 64 73 20 32 5e 36 33  SET exceeds 2^63
31be0 20 74 68 65 6e 0a 20 20 20 20 2a 2a 20 61 6c 73   then.    ** als
31bf0 6f 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20  o loop forever. 
31c00 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63 75 6d   This is undocum
31c10 65 6e 74 65 64 2e 20 20 49 6e 20 66 61 63 74 2c  ented.  In fact,
31c20 20 6f 6e 65 20 63 6f 75 6c 64 20 61 72 67 75 65   one could argue
31c30 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65  .    ** that the
31c40 20 6c 6f 6f 70 20 73 68 6f 75 6c 64 20 74 65 72   loop should ter
31c50 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 61 73 73  minate.  But ass
31c60 75 6d 69 6e 67 20 31 20 62 69 6c 6c 69 6f 6e 20  uming 1 billion 
31c70 69 74 65 72 61 74 69 6f 6e 73 0a 20 20 20 20 2a  iterations.    *
31c80 2a 20 70 65 72 20 73 65 63 6f 6e 64 20 28 66 61  * per second (fa
31c90 72 20 65 78 63 65 65 64 69 6e 67 20 74 68 65 20  r exceeding the 
31ca0 63 61 70 61 62 69 6c 69 74 69 65 73 20 6f 66 20  capabilities of 
31cb0 61 6e 79 20 63 75 72 72 65 6e 74 20 68 61 72 64  any current hard
31cc0 77 61 72 65 29 0a 20 20 20 20 2a 2a 20 69 74 20  ware).    ** it 
31cd0 77 6f 75 6c 64 20 74 61 6b 65 20 6e 65 61 72 6c  would take nearl
31ce0 79 20 33 30 30 20 79 65 61 72 73 20 74 6f 20 61  y 300 years to a
31cf0 63 74 75 61 6c 6c 79 20 72 65 61 63 68 20 74 68  ctually reach th
31d00 65 20 6c 69 6d 69 74 2e 20 20 53 6f 0a 20 20 20  e limit.  So.   
31d10 20 2a 2a 20 6c 6f 6f 70 69 6e 67 20 66 6f 72 65   ** looping fore
31d20 76 65 72 20 69 73 20 61 20 72 65 61 73 6f 6e 61  ver is a reasona
31d30 62 6c 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  ble approximatio
31d40 6e 2e 20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e  n. */.    pOut->
31d50 75 2e 69 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73  u.i = -1;.  }els
31d60 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  e{.    pOut->u.i
31d70 20 3d 20 78 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = x;.  }.  brea
31d80 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
31d90 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32   IfNotZero P1 P2
31da0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
31db0 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30  sis: if r[P1]!=0
31dc0 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c   then r[P1]-=P3,
31dd0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
31de0 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
31df0 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
31e00 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74  er.  If the cont
31e10 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
31e20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c  P1 is.** initial
31e30 6c 79 20 6e 6f 6e 7a 65 72 6f 2c 20 74 68 65 6e  ly nonzero, then
31e40 20 73 75 62 74 72 61 63 74 20 50 33 20 66 72 6f   subtract P3 fro
31e50 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
31e60 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 0a 2a  egister P1 and.*
31e70 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49  * jump to P2.  I
31e80 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
31e90 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c   initially zero,
31ea0 20 6c 65 61 76 65 20 69 74 20 75 6e 63 68 61 6e   leave it unchan
31eb0 67 65 64 0a 2a 2a 20 61 6e 64 20 66 61 6c 6c 20  ged.** and fall 
31ec0 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65  through..*/.case
31ed0 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b   OP_IfNotZero: {
31ee0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
31ef0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
31f00 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
31f10 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
31f20 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
31f30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
31f40 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c  ken(pIn1->u.i<0,
31f50 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
31f60 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 70 49 6e  >u.i ){.     pIn
31f70 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70  1->u.i -= pOp->p
31f80 33 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d  3;.     goto jum
31f90 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
31fa0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
31fb0 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f  de: DecrJumpZero
31fc0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
31fd0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d  Synopsis: if (--
31fe0 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50  r[P1])==0 goto P
31ff0 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
32000 20 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e   P1 must hold an
32010 20 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72 65   integer.  Decre
32020 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69  ment the value i
32030 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 6a 75 6d 70  n P1.** and jump
32040 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 6e 65   to P2 if the ne
32050 77 20 76 61 6c 75 65 20 69 73 20 65 78 61 63 74  w value is exact
32060 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65  ly zero..*/.case
32070 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72 6f   OP_DecrJumpZero
32080 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  : {      /* jump
32090 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
320a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
320b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
320c0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
320d0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
320e0 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  .i>SMALLEST_INT6
320f0 34 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b  4 ) pIn1->u.i--;
32100 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
32110 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c  en(pIn1->u.i==0,
32120 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
32130 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a  >u.i==0 ) goto j
32140 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
32150 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
32160 65 3a 20 41 67 67 53 74 65 70 30 20 2a 20 50 32  e: AggStep0 * P2
32170 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
32180 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
32190 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d  3] step(r[P2@P5]
321a0 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ).**.** Execute 
321b0 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
321c0 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
321d0 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63  te.  The.** func
321e0 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75  tion has P5 argu
321f0 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61  ments.   P4 is a
32200 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
32210 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63  FuncDef.** struc
32220 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66  ture that specif
32230 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ies the function
32240 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69  .  Register P3 i
32250 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c  s the.** accumul
32260 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
32270 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
32280 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
32290 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
322a0 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
322b0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  /./* Opcode: Agg
322c0 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20  Step * P2 P3 P4 
322d0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
322e0 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70  accum=r[P3] step
322f0 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
32300 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65   Execute the ste
32310 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  p function for a
32320 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68  n aggregate.  Th
32330 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61  e.** function ha
32340 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20  s P5 arguments. 
32350 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
32360 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
32370 63 6f 6e 74 65 78 74 0a 2a 2a 20 6f 62 6a 65 63  context.** objec
32380 74 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  t that is used t
32390 6f 20 72 75 6e 20 74 68 65 20 66 75 6e 63 74 69  o run the functi
323a0 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50 33  on.  Register P3
323b0 20 69 73 0a 2a 2a 20 61 73 20 74 68 65 20 61 63   is.** as the ac
323c0 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
323d0 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
323e0 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
323f0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
32400 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
32410 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  rs..**.** This o
32420 70 63 6f 64 65 20 69 73 20 69 6e 69 74 69 61 6c  pcode is initial
32430 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 41  ly coded as OP_A
32440 67 67 53 74 65 70 30 2e 20 20 4f 6e 20 66 69 72  ggStep0.  On fir
32450 73 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a  st evaluation,.*
32460 2a 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  * the FuncDef st
32470 6f 72 65 64 20 69 6e 20 50 34 20 69 73 20 63 6f  ored in P4 is co
32480 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
32490 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
324a0 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64  and.** the opcod
324b0 65 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 49  e is changed.  I
324c0 6e 20 74 68 69 73 20 77 61 79 2c 20 74 68 65 20  n this way, the 
324d0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f  initialization o
324e0 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  f the.** sqlite3
324f0 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61  _context only ha
32500 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74  ppens once, inst
32510 65 61 64 20 6f 66 20 6f 6e 20 65 61 63 68 20 63  ead of on each c
32520 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74  all to the.** st
32530 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  ep function..*/.
32540 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 30  case OP_AggStep0
32550 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73  : {.  int n;.  s
32560 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
32570 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
32580 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
32590 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20  _FUNCDEF );.  n 
325a0 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
325b0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
325c0 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
325d0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
325e0 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
325f0 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
32600 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
32610 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
32620 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b  ->nCursor)+1) );
32630 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
32640 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
32650 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
32660 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c   );.  pCtx = sql
32670 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
32680 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43  N(db, sizeof(*pC
32690 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65  tx) + (n-1)*size
326a0 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  of(sqlite3_value
326b0 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d  *));.  if( pCtx=
326c0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
326d0 3b 0a 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d  ;.  pCtx->pMem =
326e0 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e   0;.  pCtx->pFun
326f0 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
32700 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d  c;.  pCtx->iOp =
32710 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
32720 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65  );.  pCtx->pVdbe
32730 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72   = p;.  pCtx->ar
32740 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70  gc = n;.  pOp->p
32750 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43  4type = P4_FUNCC
32760 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43  TX;.  pOp->p4.pC
32770 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70  tx = pCtx;.  pOp
32780 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 41 67  ->opcode = OP_Ag
32790 67 53 74 65 70 3b 0a 20 20 2f 2a 20 46 61 6c 6c  gStep;.  /* Fall
327a0 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
327b0 5f 41 67 67 53 74 65 70 20 2a 2f 0a 7d 0a 63 61  _AggStep */.}.ca
327c0 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b  se OP_AggStep: {
327d0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69  .  int i;.  sqli
327e0 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
327f0 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a  x;.  Mem *pMem;.
32800 20 20 4d 65 6d 20 74 3b 0a 0a 20 20 61 73 73 65    Mem t;..  asse
32810 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
32820 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20  =P4_FUNCCTX );. 
32830 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e   pCtx = pOp->p4.
32840 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  pCtx;.  pMem = &
32850 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a  aMem[pOp->p3];..
32860 20 20 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e    /* If this fun
32870 63 74 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20  ction is inside 
32880 6f 66 20 61 20 74 72 69 67 67 65 72 2c 20 74 68  of a trigger, th
32890 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79  e register array
328a0 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20   in aMem[].  ** 
328b0 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f  might change fro
328c0 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e  m one evaluation
328d0 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 20 20 54   to the next.  T
328e0 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66  he next block of
328f0 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b   code.  ** check
32900 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  s to see if the 
32910 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20 68  register array h
32920 61 73 20 63 68 61 6e 67 65 64 2c 20 61 6e 64 20  as changed, and 
32930 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65  if so it.  ** re
32940 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20  initializes the 
32950 72 65 6c 61 76 61 6e 74 20 70 61 72 74 73 20 6f  relavant parts o
32960 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f  f the sqlite3_co
32970 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a  ntext object */.
32980 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d    if( pCtx->pMem
32990 20 21 3d 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20   != pMem ){.    
329a0 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65  pCtx->pMem = pMe
329b0 6d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74  m;.    for(i=pCt
329c0 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b  x->argc-1; i>=0;
329d0 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76   i--) pCtx->argv
329e0 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  [i] = &aMem[pOp-
329f0 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66  >p2+i];.  }..#if
32a00 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
32a10 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43  .  for(i=0; i<pC
32a20 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a  tx->argc; i++){.
32a30 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
32a40 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67  sValid(pCtx->arg
32a50 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47  v[i]) );.    REG
32a60 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
32a70 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67  >p2+i, pCtx->arg
32a80 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  v[i]);.  }.#endi
32a90 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a  f..  pMem->n++;.
32aa0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
32ab0 49 6e 69 74 28 26 74 2c 20 64 62 2c 20 4d 45 4d  Init(&t, db, MEM
32ac0 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e  _Null);.  pCtx->
32ad0 70 4f 75 74 20 3d 20 26 74 3b 0a 20 20 70 43 74  pOut = &t;.  pCt
32ae0 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d  x->fErrorOrAux =
32af0 20 30 3b 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70   0;.  pCtx->skip
32b00 46 6c 61 67 20 3d 20 30 3b 0a 20 20 28 70 43 74  Flag = 0;.  (pCt
32b10 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75 6e 63  x->pFunc->xSFunc
32b20 29 28 70 43 74 78 2c 70 43 74 78 2d 3e 61 72 67  )(pCtx,pCtx->arg
32b30 63 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b 20 2f  c,pCtx->argv); /
32b40 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32  * IMP: R-24505-2
32b50 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 70 43  3230 */.  if( pC
32b60 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20  tx->fErrorOrAux 
32b70 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d  ){.    if( pCtx-
32b80 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  >isError ){.    
32b90 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
32ba0 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69  or(p, "%s", sqli
32bb0 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26  te3_value_text(&
32bc0 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  t));.      rc = 
32bd0 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20  pCtx->isError;. 
32be0 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
32bf0 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
32c00 74 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  t);.    if( rc )
32c10 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
32c20 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73  to_error;.  }els
32c30 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 74  e{.    assert( t
32c40 2e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c  .flags==MEM_Null
32c50 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 43   );.  }.  if( pC
32c60 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b 0a  tx->skipFlag ){.
32c70 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
32c80 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
32c90 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69 20  ollSeq );.    i 
32ca0 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20  = pOp[-1].p1;.  
32cb0 20 20 69 66 28 20 69 20 29 20 73 71 6c 69 74 65    if( i ) sqlite
32cc0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
32cd0 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20  (&aMem[i], 1);. 
32ce0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
32cf0 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e  * Opcode: AggFin
32d00 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  al P1 P2 * P4 *.
32d10 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
32d20 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a  um=r[P1] N=P2.**
32d30 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
32d40 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69  finalizer functi
32d50 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
32d60 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74  ate.  P1 is.** t
32d70 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
32d80 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 61  on that is the a
32d90 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74  ccumulator for t
32da0 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a  he aggregate..**
32db0 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75  .** P2 is the nu
32dc0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
32dd0 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70 20  s that the step 
32de0 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61  function takes a
32df0 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  nd.** P4 is a po
32e00 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e  inter to the Fun
32e10 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66 75  cDef for this fu
32e20 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a  nction.  The P2.
32e30 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e  ** argument is n
32e40 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ot used by this 
32e50 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f  opcode.  It is o
32e60 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69 73  nly there to dis
32e70 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e  ambiguate.** fun
32e80 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20  ctions that can 
32e90 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d  take varying num
32ea0 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74  bers of argument
32eb0 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72  s.  The.** P4 ar
32ec0 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e  gument is only n
32ed0 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 64 65  eeded for the de
32ee0 67 65 6e 65 72 61 74 65 20 63 61 73 65 20 77 68  generate case wh
32ef0 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20  ere.** the step 
32f00 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74  function was not
32f10 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c   previously call
32f20 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ed..*/.case OP_A
32f30 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d  ggFinal: {.  Mem
32f40 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74   *pMem;.  assert
32f50 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
32f60 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
32f70 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
32f80 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d   );.  pMem = &aM
32f90 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
32fa0 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
32fb0 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c  ags & ~(MEM_Null
32fc0 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b  |MEM_Agg))==0 );
32fd0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
32fe0 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70  dbeMemFinalize(p
32ff0 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75  Mem, pOp->p4.pFu
33000 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b  nc);.  if( rc ){
33010 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
33020 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73  Error(p, "%s", s
33030 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
33040 74 28 70 4d 65 6d 29 29 3b 0a 20 20 20 20 67 6f  t(pMem));.    go
33050 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
33060 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c  error;.  }.  sql
33070 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
33080 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63  coding(pMem, enc
33090 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45  oding);.  UPDATE
330a0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d  _MAX_BLOBSIZE(pM
330b0 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  em);.  if( sqlit
330c0 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
330d0 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74  pMem) ){.    got
330e0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
330f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
33100 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
33110 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68  AL./* Opcode: Ch
33120 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50  eckpoint P1 P2 P
33130 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63  3 * *.**.** Chec
33140 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20  kpoint database 
33150 50 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f  P1. This is a no
33160 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74  -op if P1 is not
33170 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a   currently in.**
33180 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d   WAL mode. Param
33190 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f  eter P2 is one o
331a0 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  f SQLITE_CHECKPO
331b0 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c  INT_PASSIVE, FUL
331c0 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20 6f  L,.** RESTART, o
331d0 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57 72 69  r TRUNCATE.  Wri
331e0 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d  te 1 or 0 into m
331f0 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68  em[P3] if the ch
33200 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73  eckpoint returns
33210 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
33220 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69  or not, respecti
33230 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65  vely.  Write the
33240 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
33250 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61   in the.** WAL a
33260 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
33270 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b  int into mem[P3+
33280 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65  1] and the numbe
33290 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e  r of pages.** in
332a0 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68 61   the WAL that ha
332b0 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69  ve been checkpoi
332c0 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20 63  nted after the c
332d0 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d  heckpoint.** com
332e0 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b  pletes into mem[
332f0 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20  P3+2].  However 
33300 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d  on an error, mem
33310 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65  [P3+1] and.** me
33320 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74  m[P3+2] are init
33330 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a  ialized to -1..*
33340 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70  /.case OP_Checkp
33350 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  oint: {.  int i;
33360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33370 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
33380 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
33390 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20  nt aRes[3];     
333a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
333b0 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d  * Results */.  M
333c0 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
333d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
333e0 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73 20  * Write results 
333f0 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72  here */..  asser
33400 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
33410 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d  0 );.  aRes[0] =
33420 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20   0;.  aRes[1] = 
33430 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20  aRes[2] = -1;.  
33440 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
33450 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
33460 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20  NT_PASSIVE.     
33470 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
33480 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
33490 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70  FULL.       || p
334a0 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
334b0 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52  HECKPOINT_RESTAR
334c0 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d  T.       || pOp-
334d0 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
334e0 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 0a  KPOINT_TRUNCATE.
334f0 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69    );.  rc = sqli
33500 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62  te3Checkpoint(db
33510 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
33520 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61  p2, &aRes[1], &a
33530 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72  Res[2]);.  if( r
33540 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21  c ){.    if( rc!
33550 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 20 67  =SQLITE_BUSY ) g
33560 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
33570 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d  _error;.    rc =
33580 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
33590 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d  aRes[0] = 1;.  }
335a0 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d  .  for(i=0, pMem
335b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
335c0 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65  ]; i<3; i++, pMe
335d0 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  m++){.    sqlite
335e0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
335f0 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73  (pMem, (i64)aRes
33600 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20  [i]);.  }    .  
33610 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64  break;.};  .#end
33620 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
33630 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f  TE_OMIT_PRAGMA./
33640 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61  * Opcode: Journa
33650 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a  lMode P1 P2 P3 *
33660 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20   *.**.** Change 
33670 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  the journal mode
33680 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20   of database P1 
33690 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62  to P3. P3 must b
336a0 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20  e one of the.** 
336b0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
336c0 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66  E_XXX values. If
336d0 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65   changing betwee
336e0 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f  n the various ro
336f0 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20  llback.** modes 
33700 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74  (delete, truncat
33710 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20  e, persist, off 
33720 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69  and memory), thi
33730 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a  s is a simple.**
33740 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49   operation. No I
33750 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  O is required..*
33760 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67  *.** If changing
33770 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20   into or out of 
33780 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f  WAL mode the pro
33790 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63  cedure is more c
337a0 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a  omplicated..**.*
337b0 2a 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67  * Write a string
337c0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
337d0 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f  final journal-mo
337e0 64 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  de to register P
337f0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f  2..*/.case OP_Jo
33800 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20  urnalMode: {    
33810 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72  /* out2 */.  Btr
33820 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
33830 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
33840 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20  Btree to change 
33850 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20  journal mode of 
33860 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67  */.  Pager *pPag
33870 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
33880 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73       /* Pager as
33890 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 70 42  sociated with pB
338a0 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b  t */.  int eNew;
338b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338c0 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f         /* New jo
338d0 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20  urnal mode */.  
338e0 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20  int eOld;       
338f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33900 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e  /* The old journ
33910 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64  al mode */.#ifnd
33920 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
33930 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  AL.  const char 
33940 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20  *zFilename;     
33950 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
33960 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f  database file fo
33970 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64  r pPager */.#end
33980 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  if..  pOut = out
33990 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
339a0 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f  Op);.  eNew = pO
339b0 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
339c0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
339d0 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20  RNALMODE_DELETE 
339e0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
339f0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
33a00 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20  DE_TRUNCATE .   
33a10 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
33a20 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50  ER_JOURNALMODE_P
33a30 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c  ERSIST .       |
33a40 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
33a50 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20  URNALMODE_OFF.  
33a60 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
33a70 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
33a80 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c  MEMORY.       ||
33a90 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
33aa0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
33ab0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
33ac0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
33ad0 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65  UERY.  );.  asse
33ae0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
33af0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
33b00 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  b );.  assert( p
33b10 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
33b20 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ..  pBt = db->aD
33b30 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
33b40 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74    pPager = sqlit
33b50 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74  e3BtreePager(pBt
33b60 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69  );.  eOld = sqli
33b70 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e  te3PagerGetJourn
33b80 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a  alMode(pPager);.
33b90 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45    if( eNew==PAGE
33ba0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
33bb0 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c  ERY ) eNew = eOl
33bc0 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  d;.  if( !sqlite
33bd0 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65  3PagerOkToChange
33be0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
33bf0 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c  er) ) eNew = eOl
33c00 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  d;..#ifndef SQLI
33c10 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46  TE_OMIT_WAL.  zF
33c20 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65  ilename = sqlite
33c30 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70  3PagerFilename(p
33c40 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a  Pager, 1);..  /*
33c50 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20   Do not allow a 
33c60 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f  transition to jo
33c70 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66  urnal_mode=WAL f
33c80 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20  or a database.  
33c90 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ** in temporary 
33ca0 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68  storage or if th
33cb0 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73  e VFS does not s
33cc0 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65  upport shared me
33cd0 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28  mory .  */.  if(
33ce0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
33cf0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
33d00 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65  && (sqlite3Strle
33d10 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d  n30(zFilename)==
33d20 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  0           /* T
33d30 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20  emp file */.    
33d40 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61     || !sqlite3Pa
33d50 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28  gerWalSupported(
33d60 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f  pPager))   /* No
33d70 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73   shared-memory s
33d80 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20  upport */.  ){. 
33d90 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a     eNew = eOld;.
33da0 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77    }..  if( (eNew
33db0 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65  !=eOld).   && (e
33dc0 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
33dd0 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e  ALMODE_WAL || eN
33de0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
33df0 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a  LMODE_WAL).  ){.
33e00 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74      if( !db->aut
33e10 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e  oCommit || db->n
33e20 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20  VdbeRead>1 ){.  
33e30 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
33e40 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c  ERROR;.      sql
33e50 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
33e60 0a 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e  .          "cann
33e70 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c  ot change %s wal
33e80 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69   mode from withi
33e90 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  n a transaction"
33ea0 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65  ,.          (eNe
33eb0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
33ec0 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f  MODE_WAL ? "into
33ed0 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20  " : "out of").  
33ee0 20 20 20 20 29 3b 0a 20 20 20 20 20 20 67 6f 74      );.      got
33ef0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
33f00 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  rror;.    }else{
33f10 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c  . .      if( eOl
33f20 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
33f30 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20  MODE_WAL ){.    
33f40 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e      /* If leavin
33f50 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73  g WAL mode, clos
33f60 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20  e the log file. 
33f70 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  If successful, t
33f80 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20  he call.        
33f90 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65  ** to PagerClose
33fa0 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74  Wal() checkpoint
33fb0 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68  s and deletes th
33fc0 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f  e write-ahead-lo
33fd0 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69  g .        ** fi
33fe0 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45  le. An EXCLUSIVE
33ff0 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20   lock may still 
34000 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64  be held on the d
34010 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20  atabase file .  
34020 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61        ** after a
34030 20 73 75 63 63 65 73 73 66 75 6c 20 72 65 74 75   successful retu
34040 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a  rn. .        */.
34050 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
34060 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61  ite3PagerCloseWa
34070 6c 28 70 50 61 67 65 72 2c 20 64 62 29 3b 0a 20  l(pPager, db);. 
34080 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53         if( rc==S
34090 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
340a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
340b0 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
340c0 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
340d0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
340e0 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d  }else if( eOld==
340f0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34100 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20  E_MEMORY ){.    
34110 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72      /* Cannot tr
34120 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c  ansition directl
34130 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f  y from MEMORY to
34140 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20   WAL.  Use mode 
34150 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  OFF.        ** a
34160 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74  s an intermediat
34170 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c  e */.        sql
34180 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
34190 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
341a0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
341b0 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a  E_OFF);.      }.
341c0 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e    .      /* Open
341d0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
341e0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
341f0 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20  ile. Regardless 
34200 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20  of the journal. 
34210 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68       ** mode, th
34220 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  is transaction a
34230 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c  lways uses a rol
34240 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20  lback journal.. 
34250 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
34260 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
34270 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29  eeIsInTrans(pBt)
34280 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ==0 );.      if(
34290 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
342a0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
342b0 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65  qlite3BtreeSetVe
342c0 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77  rsion(pBt, (eNew
342d0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
342e0 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29  ODE_WAL ? 2 : 1)
342f0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
34300 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69  .  }.#endif /* i
34310 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
34320 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20  T_WAL */..  if( 
34330 72 63 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64  rc ) eNew = eOld
34340 3b 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74  ;.  eNew = sqlit
34350 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
34360 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
34370 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c  ew);..  pOut->fl
34380 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
34390 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
343a0 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28  m;.  pOut->z = (
343b0 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f  char *)sqlite3Jo
343c0 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e  urnalModename(eN
343d0 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ew);.  pOut->n =
343e0 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
343f0 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75  (pOut->z);.  pOu
34400 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
34410 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56  UTF8;.  sqlite3V
34420 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
34430 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
34440 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
34450 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
34460 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
34470 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
34480 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20  ITE_OMIT_PRAGMA 
34490 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  */..#if !defined
344a0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43  (SQLITE_OMIT_VAC
344b0 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64  UUM) && !defined
344c0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54  (SQLITE_OMIT_ATT
344d0 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACH)./* Opcode: 
344e0 56 61 63 75 75 6d 20 50 31 20 2a 20 2a 20 2a 20  Vacuum P1 * * * 
344f0 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74  *.**.** Vacuum t
34500 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  he entire databa
34510 73 65 20 50 31 2e 20 20 50 31 20 69 73 20 30 20  se P1.  P1 is 0 
34520 66 6f 72 20 22 6d 61 69 6e 22 2c 20 61 6e 64 20  for "main", and 
34530 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20 66 6f 72  2 or more.** for
34540 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
34550 61 62 61 73 65 2e 20 20 54 68 65 20 22 74 65 6d  abase.  The "tem
34560 70 22 20 64 61 74 61 62 61 73 65 20 6d 61 79 20  p" database may 
34570 6e 6f 74 20 62 65 20 76 61 63 75 75 6d 65 64 2e  not be vacuumed.
34580 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75  .*/.case OP_Vacu
34590 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  um: {.  assert( 
345a0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
345b0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
345c0 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45  RunVacuum(&p->zE
345d0 72 72 4d 73 67 2c 20 64 62 2c 20 70 4f 70 2d 3e  rrMsg, db, pOp->
345e0 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  p1);.  if( rc ) 
345f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
34600 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
34610 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ;.}.#endif..#if 
34620 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34630 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
34640 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72  ./* Opcode: Incr
34650 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a  Vacuum P1 P2 * *
34660 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d   *.**.** Perform
34670 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f   a single step o
34680 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61  f the incrementa
34690 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75  l vacuum procedu
346a0 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20  re on.** the P1 
346b0 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
346c0 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69   vacuum has fini
346d0 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  shed, jump to in
346e0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e  struction.** P2.
346f0 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
34700 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
34710 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
34720 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63  ..*/.case OP_Inc
34730 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20  rVacuum: {      
34740 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42    /* jump */.  B
34750 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
34760 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
34770 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
34780 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
34790 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
347a0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
347b0 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
347c0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
347d0 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
347e0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
347f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
34800 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42  reeIncrVacuum(pB
34810 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  t);.  VdbeBranch
34820 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45  Taken(rc==SQLITE
34830 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20  _DONE,2);.  if( 
34840 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63  rc ){.    if( rc
34850 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20  !=SQLITE_DONE ) 
34860 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
34870 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63 20  o_error;.    rc 
34880 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
34890 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
348a0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
348b0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
348c0 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20  de: Expire P1 * 
348d0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73  * * *.**.** Caus
348e0 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74  e precompiled st
348f0 61 74 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69  atements to expi
34900 72 65 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70  re.  When an exp
34910 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
34920 2a 20 69 73 20 65 78 65 63 75 74 65 64 20 75 73  * is executed us
34930 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ing sqlite3_step
34940 28 29 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65  () it will eithe
34950 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  r automatically.
34960 2a 2a 20 72 65 70 72 65 70 61 72 65 20 69 74 73  ** reprepare its
34970 65 6c 66 20 28 69 66 20 69 74 20 77 61 73 20 6f  elf (if it was o
34980 72 69 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65  riginally create
34990 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
349a0 70 72 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a  prepare_v2()).**
349b0 20 6f 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c   or it will fail
349c0 20 77 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48   with SQLITE_SCH
349d0 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50  EMA..** .** If P
349e0 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c  1 is 0, then all
349f0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
34a00 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20  become expired. 
34a10 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
34a20 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20  o,.** then only 
34a30 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78  the currently ex
34a40 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  ecuting statemen
34a50 74 20 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f  t is expired..*/
34a60 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a  .case OP_Expire:
34a70 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70   {.  if( !pOp->p
34a80 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
34a90 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
34aa0 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
34ab0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78  }else{.    p->ex
34ac0 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20  pired = 1;.  }. 
34ad0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
34ae0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
34af0 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f  HARED_CACHE./* O
34b00 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b  pcode: TableLock
34b10 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
34b20 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d  * Synopsis: iDb=
34b30 50 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65  P1 root=P2 write
34b40 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e  =P3.**.** Obtain
34b50 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72   a lock on a par
34b60 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54  ticular table. T
34b70 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
34b80 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
34b90 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d  n.** the shared-
34ba0 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73  cache feature is
34bb0 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a   enabled. .**.**
34bc0 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
34bd0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
34be0 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
34bf0 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
34c00 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68  e.** on which th
34c10 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  e lock is acquir
34c20 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20  ed.  A readlock 
34c30 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50  is obtained if P
34c40 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69  3==0 or.** a wri
34c50 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31  te lock if P3==1
34c60 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61  ..**.** P2 conta
34c70 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67  ins the root-pag
34c80 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
34c90 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34  o lock..**.** P4
34ca0 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e   contains a poin
34cb0 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20  ter to the name 
34cc0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
34cd0 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20  ng locked. This 
34ce0 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20  is only.** used 
34cf0 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65  to generate an e
34d00 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20  rror message if 
34d10 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20  the lock cannot 
34d20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a  be obtained..*/.
34d30 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63  case OP_TableLoc
34d40 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74  k: {.  u8 isWrit
34d50 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d  eLock = (u8)pOp-
34d60 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69  >p3;.  if( isWri
34d70 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62  teLock || 0==(db
34d80 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52  ->flags&SQLITE_R
34d90 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20  eadUncommitted) 
34da0 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20  ){.    int p1 = 
34db0 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73  pOp->p1; .    as
34dc0 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70  sert( p1>=0 && p
34dd0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20  1<db->nDb );.   
34de0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
34df0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
34e00 2c 20 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73  , p1) );.    ass
34e10 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b  ert( isWriteLock
34e20 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f  ==0 || isWriteLo
34e30 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20  ck==1 );.    rc 
34e40 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f  = sqlite3BtreeLo
34e50 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  ckTable(db->aDb[
34e60 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  p1].pBt, pOp->p2
34e70 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a  , isWriteLock);.
34e80 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
34e90 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46      if( (rc&0xFF
34ea0 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  )==SQLITE_LOCKED
34eb0 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73   ){.        cons
34ec0 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d  t char *z = pOp-
34ed0 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 20 20 73  >p4.z;.        s
34ee0 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
34ef0 70 2c 20 22 64 61 74 61 62 61 73 65 20 74 61 62  p, "database tab
34f00 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73  le is locked: %s
34f10 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ", z);.      }. 
34f20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
34f30 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
34f40 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
34f50 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
34f60 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
34f70 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  CACHE */..#ifnde
34f80 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
34f90 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
34fa0 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a  code: VBegin * *
34fb0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
34fc0 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65   may be a pointe
34fd0 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
34fe0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20  vtab structure. 
34ff0 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20  If so, call the 
35000 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f  .** xBegin metho
35010 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
35020 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68  ..**.** Also, wh
35030 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20  ether or not P4 
35040 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68  is set, check th
35050 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62  at this is not b
35060 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
35070 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c  .** within a cal
35080 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75  lback to a virtu
35090 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29  al table xSync()
350a0 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69   method. If it i
350b0 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20  s, the error.** 
350c0 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74  code will be set
350d0 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   to SQLITE_LOCKE
350e0 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42  D..*/.case OP_VB
350f0 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65  egin: {.  VTable
35100 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62   *pVTab;.  pVTab
35110 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
35120 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
35130 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56  VtabBegin(db, pV
35140 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61  Tab);.  if( pVTa
35150 62 20 29 20 73 71 6c 69 74 65 33 56 74 61 62 49  b ) sqlite3VtabI
35160 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
35170 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20  VTab->pVtab);.  
35180 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
35190 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
351a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
351b0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
351c0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
351d0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
351e0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
351f0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
35200 56 43 72 65 61 74 65 20 50 31 20 50 32 20 2a 20  VCreate P1 P2 * 
35210 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  * *.**.** P2 is 
35220 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
35230 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f  holds the name o
35240 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
35250 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 0a 2a  e in database .*
35260 2a 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78  * P1. Call the x
35270 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20 66 6f  Create method fo
35280 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  r that table..*/
35290 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65  .case OP_VCreate
352a0 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20  : {.  Mem sMem; 
352b0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
352c0 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f  storing the reco
352d0 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
352e0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
352f0 20 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e 61 6d 65   *zTab;  /* Name
35300 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   of the virtual 
35310 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65 6d 73  table */..  mems
35320 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a  et(&sMem, 0, siz
35330 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 73 4d  eof(sMem));.  sM
35340 65 6d 2e 64 62 20 3d 20 64 62 3b 0a 20 20 2f 2a  em.db = db;.  /*
35350 20 42 65 63 61 75 73 65 20 50 32 20 69 73 20 61   Because P2 is a
35360 6c 77 61 79 73 20 61 20 73 74 61 74 69 63 20 73  lways a static s
35370 74 72 69 6e 67 2c 20 69 74 20 69 73 20 69 6d 70  tring, it is imp
35380 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65 0a  ossible for the.
35390 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
353a0 4d 65 6d 43 6f 70 79 28 29 20 74 6f 20 66 61 69  MemCopy() to fai
353b0 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28  l */.  assert( (
353c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c  aMem[pOp->p2].fl
353d0 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 21 3d  ags & MEM_Str)!=
353e0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  0 );.  assert( (
353f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c  aMem[pOp->p2].fl
35400 61 67 73 20 26 20 4d 45 4d 5f 53 74 61 74 69 63  ags & MEM_Static
35410 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  )!=0 );.  rc = s
35420 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70  qlite3VdbeMemCop
35430 79 28 26 73 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70  y(&sMem, &aMem[p
35440 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 61 73 73 65  Op->p2]);.  asse
35450 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
35460 4b 20 29 3b 0a 20 20 7a 54 61 62 20 3d 20 28 63  K );.  zTab = (c
35470 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
35480 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 73  e3_value_text(&s
35490 4d 65 6d 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Mem);.  assert( 
354a0 7a 54 61 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  zTab || db->mall
354b0 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 69 66  ocFailed );.  if
354c0 28 20 7a 54 61 62 20 29 7b 0a 20 20 20 20 72 63  ( zTab ){.    rc
354d0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
354e0 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70  llCreate(db, pOp
354f0 2d 3e 70 31 2c 20 7a 54 61 62 2c 20 26 70 2d 3e  ->p1, zTab, &p->
35500 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20  zErrMsg);.  }.  
35510 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
35520 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20  lease(&sMem);.  
35530 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
35540 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
35550 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
35560 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
35570 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
35580 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
35590 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
355a0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
355b0 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20  VDestroy P1 * * 
355c0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
355d0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
355e0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
355f0 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43 61  database P1.  Ca
35600 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79 20  ll the xDestroy 
35610 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61  method.** of tha
35620 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
35630 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a   OP_VDestroy: {.
35640 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b    db->nVDestroy+
35650 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  +;.  rc = sqlite
35660 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
35670 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
35680 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64 62 2d 3e  p->p4.z);.  db->
35690 6e 56 44 65 73 74 72 6f 79 2d 2d 3b 0a 20 20 69  nVDestroy--;.  i
356a0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
356b0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
356c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
356d0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
356e0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
356f0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
35700 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
35710 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
35720 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a  Open P1 * * P4 *
35730 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
35740 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
35750 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
35760 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
35770 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
35780 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e  P1 is a cursor n
35790 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63  umber.  This opc
357a0 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73  ode opens a curs
357b0 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75 61  or to the virtua
357c0 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73  l.** table and s
357d0 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73 6f  tores that curso
357e0 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  r in P1..*/.case
357f0 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56   OP_VOpen: {.  V
35800 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
35810 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
35820 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20  cursor *pVCur;. 
35830 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
35840 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
35850 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
35860 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74  odule;..  assert
35870 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
35880 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20  ;.  pCur = 0;.  
35890 70 56 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74  pVCur = 0;.  pVt
358a0 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
358b0 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28  ab->pVtab;.  if(
358c0 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56   pVtab==0 || NEV
358d0 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  ER(pVtab->pModul
358e0 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20  e==0) ){.    rc 
358f0 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
35900 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
35910 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
35920 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  }.  pModule = pV
35930 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
35940 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f  rc = pModule->xO
35950 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 43 75  pen(pVtab, &pVCu
35960 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  r);.  sqlite3Vta
35970 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
35980 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72   pVtab);.  if( r
35990 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
359a0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
359b0 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71  /* Initialize sq
359c0 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
359d0 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a  r base class */.
359e0 20 20 70 56 43 75 72 2d 3e 70 56 74 61 62 20 3d    pVCur->pVtab =
359f0 20 70 56 74 61 62 3b 0a 0a 20 20 2f 2a 20 49 6e   pVtab;..  /* In
35a00 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75  itialize vdbe cu
35a10 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  rsor object */. 
35a20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
35a30 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
35a40 31 2c 20 30 2c 20 2d 31 2c 20 43 55 52 54 59 50  1, 0, -1, CURTYP
35a50 45 5f 56 54 41 42 29 3b 0a 20 20 69 66 28 20 70  E_VTAB);.  if( p
35a60 43 75 72 20 29 7b 0a 20 20 20 20 70 43 75 72 2d  Cur ){.    pCur-
35a70 3e 75 63 2e 70 56 43 75 72 20 3d 20 70 56 43 75  >uc.pVCur = pVCu
35a80 72 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 6e 52  r;.    pVtab->nR
35a90 65 66 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ef++;.  }else{. 
35aa0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d     assert( db->m
35ab0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
35ac0 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f     pModule->xClo
35ad0 73 65 28 70 56 43 75 72 29 3b 0a 20 20 20 20 67  se(pVCur);.    g
35ae0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
35af0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
35b00 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
35b10 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
35b20 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
35b30 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
35b40 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46  LE./* Opcode: VF
35b50 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50  ilter P1 P2 P3 P
35b60 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
35b70 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c   iplan=r[P3] zpl
35b80 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31  an='P4'.**.** P1
35b90 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65   is a cursor ope
35ba0 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e  ned using VOpen.
35bb0 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65    P2 is an addre
35bc0 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
35bd0 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64  .** the filtered
35be0 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
35bf0 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  mpty..**.** P4 i
35c00 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72  s either NULL or
35c10 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77   a string that w
35c20 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  as generated by 
35c30 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a  the xBestIndex.*
35c40 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  * method of the 
35c50 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74  module.  The int
35c60 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
35c70 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20  he P4 string is 
35c80 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d  left.** to the m
35c90 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
35ca0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
35cb0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
35cc0 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
35cd0 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  od on the virtua
35ce0 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65  l table specifie
35cf0 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65  d.** by P1.  The
35d00 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70   integer query p
35d10 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f  lan parameter to
35d20 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72   xFilter is stor
35d30 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
35d40 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50  * P3. Register P
35d50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61  3+1 stores the a
35d60 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f  rgc parameter to
35d70 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68   be passed to th
35d80 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74  e.** xFilter met
35d90 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50  hod. Registers P
35da0 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61  3+2..P3+1+argc a
35db0 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61  re the argc.** a
35dc0 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65  dditional parame
35dd0 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70  ters which are p
35de0 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c  assed to.** xFil
35df0 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67  ter as argv. Reg
35e00 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d  ister P3+2 becom
35e10 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20  es argv[0] when 
35e20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65  passed to xFilte
35e30 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20  r..**.** A jump 
35e40 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66  is made to P2 if
35e50 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
35e60 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20  after filtering 
35e70 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a  would be empty..
35e80 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74  */.case OP_VFilt
35e90 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  er: {   /* jump 
35ea0 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  */.  int nArg;. 
35eb0 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63   int iQuery;.  c
35ec0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
35ed0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
35ee0 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d  Mem *pQuery;.  M
35ef0 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c  em *pArgc;.  sql
35f00 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
35f10 20 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c 69 74   *pVCur;.  sqlit
35f20 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
35f30 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
35f40 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  ur;.  int res;. 
35f50 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a   int i;.  Mem **
35f60 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79  apArg;..  pQuery
35f70 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
35f80 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51  ];.  pArgc = &pQ
35f90 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20  uery[1];.  pCur 
35fa0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
35fb0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  p1];.  assert( m
35fc0 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72 79  emIsValid(pQuery
35fd0 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ) );.  REGISTER_
35fe0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
35ff0 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74  Query);.  assert
36000 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65  ( pCur->eCurType
36010 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  ==CURTYPE_VTAB )
36020 3b 0a 20 20 70 56 43 75 72 20 3d 20 70 43 75 72  ;.  pVCur = pCur
36030 2d 3e 75 63 2e 70 56 43 75 72 3b 0a 20 20 70 56  ->uc.pVCur;.  pV
36040 74 61 62 20 3d 20 70 56 43 75 72 2d 3e 70 56 74  tab = pVCur->pVt
36050 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
36060 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
36070 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69  .  /* Grab the i
36080 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20  ndex number and 
36090 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 73 20  argc parameters 
360a0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 51  */.  assert( (pQ
360b0 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  uery->flags&MEM_
360c0 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67 63  Int)!=0 && pArgc
360d0 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
360e0 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e   );.  nArg = (in
360f0 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20  t)pArgc->u.i;.  
36100 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51  iQuery = (int)pQ
36110 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a  uery->u.i;..  /*
36120 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c   Invoke the xFil
36130 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  ter method */.  
36140 72 65 73 20 3d 20 30 3b 0a 20 20 61 70 41 72 67  res = 0;.  apArg
36150 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 66   = p->apArg;.  f
36160 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67  or(i = 0; i<nArg
36170 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 70 41 72  ; i++){.    apAr
36180 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b  g[i] = &pArgc[i+
36190 31 5d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70  1];.  }.  rc = p
361a0 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28  Module->xFilter(
361b0 70 56 43 75 72 2c 20 69 51 75 65 72 79 2c 20 70  pVCur, iQuery, p
361c0 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20  Op->p4.z, nArg, 
361d0 61 70 41 72 67 29 3b 0a 20 20 73 71 6c 69 74 65  apArg);.  sqlite
361e0 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
361f0 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
36200 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
36210 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
36220 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65  .  res = pModule
36230 2d 3e 78 45 6f 66 28 70 56 43 75 72 29 3b 0a 20  ->xEof(pVCur);. 
36240 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
36250 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   0;.  VdbeBranch
36260 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
36270 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
36280 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
36290 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
362a0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
362b0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
362c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
362d0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
362e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c  ./* Opcode: VCol
362f0 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a  umn P1 P2 P3 * *
36300 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
36310 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a  P3]=vcolumn(P2).
36320 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
36330 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d  value of the P2-
36340 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20  th column of.** 
36350 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76  the row of the v
36360 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61  irtual-table tha
36370 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72  t the .** P1 cur
36380 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20  sor is pointing 
36390 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  to into register
363a0 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P3..*/.case OP_
363b0 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c  VColumn: {.  sql
363c0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
363d0 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
363e0 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
363f0 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b  e;.  Mem *pDest;
36400 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
36410 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20  xt sContext;..  
36420 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
36430 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
36440 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
36450 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d  pCur->eCurType==
36460 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a  CURTYPE_VTAB );.
36470 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
36480 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
36490 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
364a0 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
364b0 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
364c0 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
364d0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
364e0 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e  t);.  if( pCur->
364f0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73  nullRow ){.    s
36500 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
36510 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  Null(pDest);.   
36520 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
36530 74 61 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70  tab = pCur->uc.p
36540 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  VCur->pVtab;.  p
36550 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
36560 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
36570 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c  t( pModule->xCol
36580 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28  umn );.  memset(
36590 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69  &sContext, 0, si
365a0 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b  zeof(sContext));
365b0 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75 74  .  sContext.pOut
365c0 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d 53   = pDest;.  MemS
365d0 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74  etTypeFlag(pDest
365e0 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72  , MEM_Null);.  r
365f0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  c = pModule->xCo
36600 6c 75 6d 6e 28 70 43 75 72 2d 3e 75 63 2e 70 56  lumn(pCur->uc.pV
36610 43 75 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20  Cur, &sContext, 
36620 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69  pOp->p2);.  sqli
36630 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
36640 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
36650 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73   if( sContext.is
36660 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20  Error ){.    rc 
36670 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72  = sContext.isErr
36680 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  or;.  }.  sqlite
36690 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
366a0 69 6e 67 28 70 44 65 73 74 2c 20 65 6e 63 6f 64  ing(pDest, encod
366b0 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45 52  ing);.  REGISTER
366c0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
366d0 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45  pDest);.  UPDATE
366e0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
366f0 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  est);..  if( sql
36700 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
36710 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20  g(pDest) ){.    
36720 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
36730 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
36740 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
36750 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
36760 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
36770 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
36780 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
36790 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
367a0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
367b0 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20  de: VNext P1 P2 
367c0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61  * * *.**.** Adva
367d0 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  nce virtual tabl
367e0 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74  e P1 to the next
367f0 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75   row in its resu
36800 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75  lt set and.** ju
36810 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
36820 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68  n P2.  Or, if th
36830 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
36840 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74  has reached.** t
36850 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65  he end of its re
36860 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66  sult set, then f
36870 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
36880 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
36890 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
368a0 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75  VNext: {   /* ju
368b0 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  mp */.  sqlite3_
368c0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
368d0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
368e0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
368f0 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43  int res;.  VdbeC
36900 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20  ursor *pCur;..  
36910 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20  res = 0;.  pCur 
36920 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
36930 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
36940 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43  Cur->eCurType==C
36950 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20  URTYPE_VTAB );. 
36960 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
36970 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  ow ){.    break;
36980 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70  .  }.  pVtab = p
36990 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70  Cur->uc.pVCur->p
369a0 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
369b0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
369c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
369d0 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20  ule->xNext );.. 
369e0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
369f0 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66  Next() method of
36a00 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65   the module. The
36a10 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72  re is no way for
36a20 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c   the.  ** underl
36a30 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ying implementat
36a40 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e  ion to return an
36a50 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63   error if one oc
36a60 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a  curs during.  **
36a70 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61   xNext(). Instea
36a80 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f  d, if an error o
36a90 63 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72  ccurs, true is r
36aa0 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74  eturned (indicat
36ab0 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64  ing that .  ** d
36ac0 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ata is available
36ad0 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20  ) and the error 
36ae0 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68  code returned wh
36af0 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20  en xColumn or.  
36b00 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65  ** some other me
36b10 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76  thod is next inv
36b20 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65  oked on the save
36b30 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
36b40 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 72 63  ursor..  */.  rc
36b50 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78   = pModule->xNex
36b60 74 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72  t(pCur->uc.pVCur
36b70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
36b80 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
36b90 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63  pVtab);.  if( rc
36ba0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
36bb0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 65  e_to_error;.  re
36bc0 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
36bd0 66 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72  f(pCur->uc.pVCur
36be0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
36bf0 61 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20  aken(!res,2);.  
36c00 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20  if( !res ){.    
36c10 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64  /* If there is d
36c20 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20  ata, jump to P2 
36c30 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  */.    goto jump
36c40 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
36c50 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
36c60 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
36c70 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
36c80 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
36c90 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
36ca0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
36cb0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
36cc0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
36cd0 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20  ode: VRename P1 
36ce0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
36cf0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
36d00 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
36d10 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
36d20 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
36d30 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
36d40 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
36d50 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52  corresponding xR
36d60 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68  ename method. Th
36d70 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65  e value.** in re
36d80 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73  gister P1 is pas
36d90 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65  sed as the zName
36da0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
36db0 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
36dc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e  .*/.case OP_VRen
36dd0 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ame: {.  sqlite3
36de0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
36df0 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70  Mem *pName;..  p
36e00 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
36e10 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
36e20 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Name = &aMem[pOp
36e30 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
36e40 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
36e50 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73  >xRename );.  as
36e60 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
36e70 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73  (pName) );.  ass
36e80 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
36e90 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ==0 );.  REGISTE
36ea0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
36eb0 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72   pName);.  asser
36ec0 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20  t( pName->flags 
36ed0 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74  & MEM_Str );.  t
36ee0 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
36ef0 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc==SQLITE_UTF8
36f00 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
36f10 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
36f20 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20  TE_UTF16BE );.  
36f30 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
36f40 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
36f50 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73  16LE );.  rc = s
36f60 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
36f70 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20  Encoding(pName, 
36f80 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20  SQLITE_UTF8);.  
36f90 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
36fa0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
36fb0 3b 0a 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e  ;.  rc = pVtab->
36fc0 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
36fd0 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a  (pVtab, pName->z
36fe0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
36ff0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
37000 70 56 74 61 62 29 3b 0a 20 20 70 2d 3e 65 78 70  pVtab);.  p->exp
37010 69 72 65 64 20 3d 20 30 3b 0a 20 20 69 66 28 20  ired = 0;.  if( 
37020 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
37030 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
37040 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
37050 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
37060 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
37070 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70  E./* Opcode: VUp
37080 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34  date P1 P2 P3 P4
37090 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
370a0 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a   data=r[P3@P2].*
370b0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
370c0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
370d0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
370e0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
370f0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
37100 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
37110 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
37120 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68  ing xUpdate meth
37130 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a  od. P2 values.**
37140 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20   are contiguous 
37150 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61  memory cells sta
37160 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70  rting at P3 to p
37170 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61  ass to the xUpda
37180 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  te .** invocatio
37190 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20  n. The value in 
371a0 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d  register (P3+P2-
371b0 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  1) corresponds t
371c0 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65  o the .** p2th e
371d0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72  lement of the ar
371e0 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20  gv array passed 
371f0 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a  to xUpdate..**.*
37200 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65  * The xUpdate me
37210 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44  thod will do a D
37220 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45  ELETE or an INSE
37230 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54  RT or both..** T
37240 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65  he argv[0] eleme
37250 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73  nt (which corres
37260 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20  ponds to memory 
37270 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74  cell P3).** is t
37280 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f  he rowid of a ro
37290 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66  w to delete.  If
372a0 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c   argv[0] is NULL
372b0 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c   then no .** del
372c0 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54  etion occurs.  T
372d0 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65  he argv[1] eleme
372e0 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  nt is the rowid 
372f0 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72  of the new .** r
37300 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  ow.  This can be
37310 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68   NULL to have th
37320 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
37330 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a  select the new .
37340 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73  ** rowid for its
37350 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71  elf.  The subseq
37360 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e  uent elements in
37370 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a   the array are .
37380 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  ** the values of
37390 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
373a0 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49  new row..**.** I
373b0 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20  f P2==1 then no 
373c0 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72  insert is perfor
373d0 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73  med.  argv[0] is
373e0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a   the rowid of.**
373f0 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
37400 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
37410 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66  boolean flag. If
37420 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72   it is set to tr
37430 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61  ue and the xUpda
37440 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75  te call.** is su
37450 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74  ccessful, then t
37460 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
37470 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73  d by sqlite3_las
37480 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
37490 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74   .** is set to t
374a0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
374b0 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f  rowid for the ro
374c0 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e  w just inserted.
374d0 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65  .**.** P5 is the
374e0 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28   error actions (
374f0 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46  OE_Replace, OE_F
37500 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ail, OE_Ignore, 
37510 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79  etc) to.** apply
37520 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20   in the case of 
37530 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  a constraint fai
37540 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72  lure on an inser
37550 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a  t or update..*/.
37560 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a  case OP_VUpdate:
37570 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
37580 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
37590 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
375a0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
375b0 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a   nArg;.  int i;.
375c0 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72    sqlite_int64 r
375d0 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  owid;.  Mem **ap
375e0 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a  Arg;.  Mem *pX;.
375f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
37600 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20  p2==1        || 
37610 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c  pOp->p5==OE_Fail
37620 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
37630 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20  E_Rollback .    
37640 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
37650 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e  E_Abort || pOp->
37660 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c  p5==OE_Ignore ||
37670 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70   pOp->p5==OE_Rep
37680 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65  lace.  );.  asse
37690 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
376a0 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20  =0 );.  pVtab = 
376b0 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
376c0 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61  Vtab;.  if( pVta
376d0 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56  b==0 || NEVER(pV
376e0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29  tab->pModule==0)
376f0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
37700 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
37710 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
37720 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70  o_error;.  }.  p
37730 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
37740 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20  pModule;.  nArg 
37750 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
37760 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
37770 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69  ==P4_VTAB );.  i
37780 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c  f( ALWAYS(pModul
37790 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20  e->xUpdate) ){. 
377a0 20 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66     u8 vtabOnConf
377b0 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f  lict = db->vtabO
377c0 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61  nConflict;.    a
377d0 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
377e0 0a 20 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b  .    pX = &aMem[
377f0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f  pOp->p3];.    fo
37800 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
37810 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  ++){.      asser
37820 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58  t( memIsValid(pX
37830 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
37840 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
37850 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b  X);.      apArg[
37860 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70  i] = pX;.      p
37870 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  X++;.    }.    d
37880 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
37890 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20  t = pOp->p5;.   
378a0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
378b0 55 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41  Update(pVtab, nA
378c0 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69  rg, apArg, &rowi
378d0 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62  d);.    db->vtab
378e0 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61  OnConflict = vta
378f0 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20  bOnConflict;.   
37900 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
37910 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
37920 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
37930 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70  SQLITE_OK && pOp
37940 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73  ->p1 ){.      as
37950 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20  sert( nArg>1 && 
37960 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41  apArg[0] && (apA
37970 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d  rg[0]->flags&MEM
37980 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20  _Null) );.      
37990 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
379a0 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69  lastRowid = rowi
379b0 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  d;.    }.    if(
379c0 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49   (rc&0xff)==SQLI
379d0 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26  TE_CONSTRAINT &&
379e0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
379f0 62 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20  bConstraint ){. 
37a00 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
37a10 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20  ==OE_Ignore ){. 
37a20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
37a30 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c  TE_OK;.      }el
37a40 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65  se{.        p->e
37a50 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70  rrorAction = ((p
37a60 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61  Op->p5==OE_Repla
37a70 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a  ce) ? OE_Abort :
37a80 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20   pOp->p5);.     
37a90 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
37aa0 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b      p->nChange++
37ab0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
37ac0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
37ad0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
37ae0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
37af0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
37b00 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
37b10 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c  */..#ifndef  SQL
37b20 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
37b30 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65  RAGMAS./* Opcode
37b40 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50  : Pagecount P1 P
37b50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
37b60 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ite the current 
37b70 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
37b80 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 74  in database P1 t
37b90 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32  o memory cell P2
37ba0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67  ..*/.case OP_Pag
37bb0 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  ecount: {       
37bc0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
37bd0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
37be0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
37bf0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73  .  pOut->u.i = s
37c00 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50  qlite3BtreeLastP
37c10 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  age(db->aDb[pOp-
37c20 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65  >p1].pBt);.  bre
37c30 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23  ak;.}.#endif...#
37c40 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f  ifndef  SQLITE_O
37c50 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
37c60 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78  S./* Opcode: Max
37c70 50 67 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a  Pgcnt P1 P2 P3 *
37c80 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20   *.**.** Try to 
37c90 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  set the maximum 
37ca0 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64  page count for d
37cb0 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 74 68  atabase P1 to th
37cc0 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a  e value in P3..*
37cd0 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65  * Do not let the
37ce0 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
37cf0 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74  unt fall below t
37d00 68 65 20 63 75 72 72 65 6e 74 20 70 61 67 65 20  he current page 
37d10 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20  count and.** do 
37d20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d  not change the m
37d30 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
37d40 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30  t value if P3==0
37d50 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ..**.** Store th
37d60 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
37d70 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65 20 63  ount after the c
37d80 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65  hange in registe
37d90 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
37da0 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20  _MaxPgcnt: {    
37db0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
37dc0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
37dd0 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72 65  t newMax;.  Btre
37de0 65 20 2a 70 42 74 3b 0a 0a 20 20 70 4f 75 74 20  e *pBt;..  pOut 
37df0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
37e00 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 42 74 20  (p, pOp);.  pBt 
37e10 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
37e20 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78  1].pBt;.  newMax
37e30 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d   = 0;.  if( pOp-
37e40 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61  >p3 ){.    newMa
37e50 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  x = sqlite3Btree
37e60 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b 0a 20  LastPage(pBt);. 
37e70 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20 3c 20     if( newMax < 
37e80 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70  (unsigned)pOp->p
37e90 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e  3 ) newMax = (un
37ea0 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a  signed)pOp->p3;.
37eb0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
37ec0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 61  = sqlite3BtreeMa
37ed0 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74 2c 20  xPageCount(pBt, 
37ee0 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b  newMax);.  break
37ef0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  ;.}.#endif.../* 
37f00 4f 70 63 6f 64 65 3a 20 49 6e 69 74 20 50 31 20  Opcode: Init P1 
37f10 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
37f20 6f 70 73 69 73 3a 20 53 74 61 72 74 20 61 74 20  opsis: Start at 
37f30 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67 72 61 6d  P2.**.** Program
37f40 73 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67  s contain a sing
37f50 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  le instance of t
37f60 68 69 73 20 6f 70 63 6f 64 65 20 61 73 20 74 68  his opcode as th
37f70 65 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20  e very first.** 
37f80 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  opcode..**.** If
37f90 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62   tracing is enab
37fa0 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69  led (by the sqli
37fb0 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74  te3_trace()) int
37fc0 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20  erface, then.** 
37fd0 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  the UTF-8 string
37fe0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34   contained in P4
37ff0 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74   is emitted on t
38000 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63  he trace callbac
38010 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20 50 34 20 69  k..** Or if P4 i
38020 73 20 62 6c 61 6e 6b 2c 20 75 73 65 20 74 68 65  s blank, use the
38030 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
38040 20 62 79 20 73 71 6c 69 74 65 33 5f 73 71 6c 28   by sqlite3_sql(
38050 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69  )..**.** If P2 i
38060 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a 75 6d 70  s not zero, jump
38070 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
38080 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d  P2..**.** Increm
38090 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ent the value of
380a0 20 50 31 20 73 6f 20 74 68 61 74 20 4f 50 5f 4f   P1 so that OP_O
380b0 6e 63 65 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c  nce opcodes will
380c0 20 6a 75 6d 70 20 74 68 65 0a 2a 2a 20 66 69 72   jump the.** fir
380d0 73 74 20 74 69 6d 65 20 74 68 65 79 20 61 72 65  st time they are
380e0 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 74   evaluated for t
380f0 68 69 73 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73 65  his run..*/.case
38100 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20 20 20   OP_Init: {     
38110 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
38120 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a    char *zTrace;.
38130 20 20 69 6e 74 20 69 3b 0a 0a 20 20 2f 2a 20 49    int i;..  /* I
38140 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
38150 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  t is not NULL, t
38160 68 65 6e 20 69 74 20 6d 75 73 74 20 62 65 20 61  hen it must be a
38170 6e 20 53 51 4c 20 63 6f 6d 6d 65 6e 74 20 73 74  n SQL comment st
38180 72 69 6e 67 2e 0a 20 20 2a 2a 20 54 68 65 20 22  ring..  ** The "
38190 2d 2d 22 20 73 74 72 69 6e 67 20 69 73 20 62 72  --" string is br
381a0 6f 6b 65 6e 20 75 70 20 74 6f 20 70 72 65 76 65  oken up to preve
381b0 6e 74 20 66 61 6c 73 65 2d 70 6f 73 69 74 69 76  nt false-positiv
381c0 65 73 20 77 69 74 68 20 73 72 63 63 6b 31 2e 63  es with srcck1.c
381d0 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73  ..  **.  ** This
381e0 20 61 73 73 65 72 74 28 29 20 70 72 6f 76 69 64   assert() provid
381f0 65 73 20 65 76 69 64 65 6e 63 65 20 66 6f 72 3a  es evidence for:
38200 0a 20 20 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f  .  ** EVIDENCE-O
38210 46 3a 20 52 2d 35 30 36 37 36 2d 30 39 38 36 30  F: R-50676-09860
38220 20 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 63 61   The callback ca
38230 6e 20 63 6f 6d 70 75 74 65 20 74 68 65 20 73 61  n compute the sa
38240 6d 65 20 74 65 78 74 20 74 68 61 74 0a 20 20 2a  me text that.  *
38250 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65  * would have bee
38260 6e 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  n returned by th
38270 65 20 6c 65 67 61 63 79 20 73 71 6c 69 74 65 33  e legacy sqlite3
38280 5f 74 72 61 63 65 28 29 20 69 6e 74 65 72 66 61  _trace() interfa
38290 63 65 20 62 79 0a 20 20 2a 2a 20 75 73 69 6e 67  ce by.  ** using
382a0 20 74 68 65 20 58 20 61 72 67 75 6d 65 6e 74 20   the X argument 
382b0 77 68 65 6e 20 58 20 62 65 67 69 6e 73 20 77 69  when X begins wi
382c0 74 68 20 22 2d 2d 22 20 61 6e 64 20 69 6e 76 6f  th "--" and invo
3